3

Learn Python the Hard Way を終えたばかりで、現在、GitHub 100 Projects for Python に取り組んでいます。

まず、これが文字列プロジェクトを逆にするための解決策であることを理解していると言うことから始めましょう。

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

例: 'Hello string' >>> 'gnirts olleH'

上記のプログラムは、文字列を後ろから前に反転しますが、私が望むのはその場所での反転であるため、これを作成しました(これは私がやりたいことを行います):

myString = raw_input("> ")

running = True

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

例: 'Hello string' >>> 'olleH gnirts"

私は残忍な完璧主義者であり、while ループではなく For ループを使用して同じことを達成するより良い方法を誰かが知っているかどうか知りたいです。私は明らかな何かを見落としていますか?ありがとうございました!

編集:ここで 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

このようなものかもしれません:

>>> 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!'は 2 つのタブがあります。正しい結果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 に答える