刚刚完成学习Python的艰难之路,我现在正在研究GitHub 100项目的Python。
首先让我说我明白这是反向字符串项目的解决方案:
string = raw_input("> ")
print "< %r" % string[::-1]
示例:'Hello string'&gt;&gt;&gt; 'gnirts olleH'
上面的程序将字符串从后向前反转,但我想要的是反转,所以我做了这个(这就是我想要它做的事):
myString = raw_input("> ")
running = True
while running:
myList = myString.split(' ')
myList.reverse()
myNewString = ' '.join(myList)
print myNewString
running = False
示例:'Hello string'&gt;&gt;&gt; 'olleH gnirts“
我是一个残酷的完美主义者,我很好奇,如果有人知道使用For循环而不是while循环实现相同的更好方法吗?我忽略了一些明显的东西吗谢谢!
编辑:我明白这里的while循环什么都不做,感谢您的反馈!
答案 0 :(得分:2)
这是一个带有for循环的
s = 'Hello World'
rev = []
for i in s.split(' '):
rev.append(i[::-1])
print ' '.join(rev)
答案 1 :(得分:1)
Mayeb是这样的:
>>> def reverse(s): return ' '.join (s[::-1] for s in s.split(' '))
...
>>> print (reverse('Hello World!'))
olleH !dlroW
答案 2 :(得分:1)
操纵字符串的优雅方法是使用生成器和' '.join()
:
>>> myString = "Hello world!"
>>> print ' '.join( s[::-1] for s in myString.split() )
olleH !dlrow
既然你提到了while
:当你做需要一个无限循环时,这样做更惯用:
while True:
...
if exit_condition():
break
答案 3 :(得分:0)
在你的文章中有一点不清楚如何处理单词之间的多个空格。例如,'Goodbye cruel\t\tWorld!'
有两个标签。结果是eybdooG leurc !dlroW
还是eybdooG leurc\t\t!dlroW
?
如果是后者,这就是ME中的'完美主义者'所说的是正确的,这里是一个带有正则表达式的'for'循环方法:
import re
st='Goodbye cruel\t\tWorld!'
li=[]
for e in (m.group(1) for m in re.finditer(r'(\S+|\s+)', st)):
if e.strip():
e=e[::-1]
li.append(e)
print '{}=>{}'.format(st, ''.join(li))
# Goodbye cruel World!=>eybdooG leurc !dlroW