5

私は現在、回文検出器 (anna、lol、hahah など) に取り組んでおり、for ループを使用するように求められています。

プログラムに 2 つの文字列をループさせたい (値を比較しながら、それらを定期的に逆方向に同時に読み取る)。値が同じ場合、回文は True です。そうでない場合は False です。

私の質問は次のとおりです。2 つの for ループを同時に実行し、文字列の値を比較するにはどうすればよいですか?

現在、次のようなことを行っています: (Python 3.0)、必要に応じてコード全体を投稿できます:

   palindrom = True
text2 = ("")
for i in nytext:
    for i in nytext[::-1]:
        text2 = (nytext[::-1] + i)
        if text2 == nytext:
            palindrom = True
        else:
            palindrom = False
return palindrom

ご協力ありがとうございました!

編集:問題を説明するとき、私は十分に明確ではなかったかもしれません. プログラムは次のことを行います。ユーザーはテキスト文字列 (hello my name is lol など) を入力でき、プログラムはこれが回文かどうかを確認するように設計されています。3 つの機能 (およびメイン機能) に分かれています。

関数番号 1 は、テキストを修正して、文字と数字のみに縮小します (そのため、LOL,,,,,, は読みやすくするために lol になります)。関数番号 2 は、入力が回文であるかどうかを (for-loops(!) を使用して) テストするように設計されています。関数番号 3 は、回文であるかどうかに関係なく投稿するだけです。

これにfor ループを使用する必要があり、次のような単純な比較を行うことはできません。

これで問題が解決することを願っています。

4

4 に答える 4

8

あなたが使うzip

s = 'hannah'

for c_forward,c_backward in zip(s,s[::-1]):
    ...

おそらく、少し低レベルのアプローチは、インデックスをループすることです(アイテムがインデックス可能である場合):

for i in range(len(s)):
    c_forward = s[i]        #character as you loop going forward
    c_backward = s[-(i+1)]  #character as you loop going backward
    pass #TODO: determine if palindome ... :-p

将来の訪問者のために、これらは問題のすべての制約に対処するものではありませんが、Python で文字列が回文であるかどうかを確認する最も簡単な方法は、単純に次のようにすることです。

def ispal(s):
    return s == s[::-1]
于 2012-12-20T15:57:00.143 に答える
3

使用できますzip()

def is_palindrome(string):
    return all(x == y for x, y in zip(string, reversed(string)))

このzip()関数は、2 つの iterable を並行して反復処理し、最短のものの終わりで停止します。

>>> list(zip("abc", range(10)))
[('a', 0), ('b', 1), ('c', 2)]
于 2012-12-20T15:57:45.190 に答える
0

逆にそれ自体と比較してください。(Python 3.2で実行)

>>> text = "Palindrome"
>>> text[::-1]
'emordnilaP'
>>> text == text[::-1]
False
>>> text = "PalindromemordnilaP"
>>> text == text[::-1]
True
于 2012-12-20T19:38:51.410 に答える
0
def is_palindrome(txt):  
    for i, a in enumerate(txt):  
        if a!=txt[-(i+1)]:  
            return False  
    return True   

txt = 'hannah'
print txt, is_palindrome(txt)
于 2012-12-20T16:55:25.930 に答える