3

刚刚完成 Learn Python the Hard Way,我现在正在研究 GitHub 100 Projects for Python。

首先让我说我确实理解这是反转字符串项目的解决方案:

string = raw_input("> ") 
print "< %r" % string[::-1]

示例: “你好字符串”>>>“gnirts olleH”

上面的程序将字符串从后到前反转,但我想要的是一个反转,所以我做了这个(我想要它做什么):

myString = raw_input("> ")

running = True

while running:
    myList = myString.split(' ')
    myList.reverse()
    myNewString = ' '.join(myList)
    print myNewString
    running = False

示例: “你好字符串”>>>“olleH gnirts”

我是一个残酷的完美主义者,我很好奇是否有人知道使用 For 循环而不是 while 循环实现相同目标的更好方法?我是否忽略了一些明显的东西?谢谢!

编辑:我明白这里的while循环什么都不做,感谢反馈!

4

4 回答 4

2

这是一个带有for循环的

s = 'Hello World'
rev = []
for i in s.split(' '):
    rev.append(i[::-1])

print ' '.join(rev)
于 2013-11-05T19:16:37.707 回答
1

操作字符串的优雅方法是使用生成器和' '.join()

>>> myString = "Hello world!"
>>> print ' '.join( s[::-1] for s in myString.split() )
olleH !dlrow

既然你提到while:当你确实需要一个无限循环时,这样做更习惯:

while True: 
    ...

    if exit_condition(): 
        break
于 2013-11-05T19:37:00.693 回答
1

Mayeb 是这样的:

>>> def reverse(s): return ' '.join (s[::-1] for s in s.split(' '))
... 
>>> print (reverse('Hello World!'))
olleH !dlroW
于 2013-11-05T19:15:40.013 回答
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
于 2013-11-05T19:48:02.483 回答