Item
超字符限度条件单词反转 输出字符串
Contents
设计一个函数,其中一串字符串中,含有一个或多个英语单词,请将该字符串完整输出,但是,每一个字母数目为5或者以上数目的英语单词,需要将其逆转。
注意:请保持每个单词的顺序一致
题目来源:codewars(6Kyu)
Knowledge
- 数据类型:字符串(str)
- 运算符:比较运算符、赋值运算符
- 容器:列表(List)
- 其他:If-elif语句、for循环体等等
Me
- 定义函数spin_words(sentence),sentence为源字符串;
- 简要思路:分割sentence,判断分割后的各段字符长度,对应条件执行是否反转字符串;
- 分割方法:split(),空格为分隔符,分割次数默认即可,有则分割,即-1;
- 判断执行条件:>=5则执行该字符串反转,反之不变;
- 反转方法:
- reserve(速度略慢)
- 字符串切片[::-1]
- for循环
- 函数递归
- reduce(lambda x,y : y+x, a_string)(要调用模块functools)
- 栈
def rev_string(a_string):
l = list(a_string) #模拟全部入栈
new_string = ""
while len(l)>0:
new_string += l.pop() #模拟出栈
return new_string
- 全程以List为中转容器操作,最后输出字符串。
Code
CodeWarn上的方法很多,精简干练,但是对于我这种小白,我就用我想到的方法来解答所遭遇的问题,虽然做不到大佬们的那样简单明了,但是还是有自己的一点逻辑的。
#!\usr\bin\env python
# -*- coding:utf-8 -*-
def spin_words(sentence):
strTest = sentence
strSplitList = strTest.split(" ",-1)
resultList = list()
for i in strSplitList:
if len(i) >= 5:
iList =list(i)
iList.reverse()
i = ''.join(iList)
resultList.append(i+" ")
elif len(i) < 5:
resultList.append(i+" ")
resultStr = ''.join(resultList)
return resultStr.strip()