0

Python を使用して、入力が while ループのある回文であるかどうかを確認する方法を知りたいです。

ありがとう:

私はこれを試しました

i = 0
n = len(msg_list)

while i < n:
    palindrome = msg_list[i]
    if palindrome == msg_list[-1]:
        print("Palindrome? True")
        msg_list.pop(-1)
    else:
        print("Palindrome? False")
    i=i+1

しかし最後に、リストのインデックスが範囲外であるというエラーメッセージが表示されます

4

6 に答える 6

1

最後まで反復する必要はありませんが、中間の文字まで反復する必要があります。そして、逆に数えたときにすべての文字を同じインデックスの文字と比較します。

s = "abcca"
length = len(s)
i = 0

while i < length / 2 + 1:
    if s[i] != s[-i - 1]:
        print "Not Palindrome"
        break
    i += 1
else:
    print "Palidrome"

elseループの一部whileが実行され、ループが反復を完了するときにbreak.


または、ループ以外のものを使用できる場合while、このタスクは次のsingleとおりPythonです。

if s == s[::-1]: 
    print "Palindrome"

あ、二行になった。

于 2013-02-13T19:15:19.310 に答える
1

whileループで

import string

palin = 'a man, a plan, a canal, panama'

def testPalindrome(in_val):
    in_val = in_val.lower()
    left, right = 0, len(in_val) - 1
    while left < right:
        char_left, char_right = '#', '#'
        while char_left not in string.lowercase:
            char_left = in_val[left]
            left += 1
        while char_right not in string.lowercase:
            char_right = in_val[right]
            right -= 1
        if char_left != char_right:
            return False
    return True

print testPalindrome(palin)

それなし

>>> palindrome = 'a man, a plan, a canal, panama'
>>> palindrome = palindrome.replace(',', '').replace(' ', '')
>>> palindrome
'amanaplanacanalpanama'
>>> d[::-1] == d
True
于 2013-02-13T19:18:07.783 に答える
0
word = "quiniuq"
pairs = zip(word,reversed(word))
a,b = next(pairs)
try:
    while a == b:
        a,b = next(pairs)
    return False # we got here before exhausting pairs
except StopIteration:
    return True # a == b was true for every pair

ここでの while ループの使用は不自然ですが、リスト全体を消費してテストを実行します。

while ループが必要ない場合は、次のようにします。all(a == b for a,b in zip(word,reversed(word)))

于 2013-09-04T20:20:10.500 に答える
0

whileループを使用する別の方法。2 つの文字が一致しなくなると while ループが停止するため、非常に効率的ですが、もちろん Python でこれを行うには最適な方法ではありません。

def palindrome(word):
   chars_fw = list(word)
   chars_bw = list(reversed(word))
   chars_num = len(word)
   is_palindrome = True
   while chars_num:
       if chars_fw[chars_num-1] != chars_bw[chars_num-1]:
           is_palindrome = False
           break
       chars_num -= 1

   return is_palindrome 
于 2013-02-13T19:26:53.810 に答える
0

を使用した短い解決策reversed

for c, cr in s, reversed(s):
    if c != cr:
        print("Palindrome? False")
        break
else:
    print("Palindrome? True")
于 2013-02-13T19:20:16.347 に答える