不检查以前的参数

时间:2014-06-01 11:22:14

标签: python python-3.x

我正在尝试刚开始使用python而我正在尝试编写一个基本程序来检查单词是否是回文。 while循环中有一个while循环,但程序没有退出以检查第一个循环是否仍然适用。

while n <= half_word_length:
    while word[n] == word[word_length - 1 - n]:
        n += 1
    if word[n] != word[word_length - n]:
        print('This word is not a palindrome.')
    break
else:
    print('This word is a palindrome.')

无论输入字是否是回文,错误信息都是"list index out of range"。我以为是因为它没有在循环外检查,但是非回文不应该导致程序崩溃。

道歉,如果这很难理解,告诉我,我会尝试修理一下:)

2 个答案:

答案 0 :(得分:1)

首先,使用Python,您可以使用负面索引:

mystr = "hello world"
mystr[0] # "h"
mystr[-1] # "d"
mystr[-2] # "r"

不要犹豫使用它们!

for i in range(0, len(word)):
    if word[i] != s[-1 - i]:
        return False
return True

然后,正如我在之前的评论中所说,有一些 pythonic方式做这些事情。例如,您可以在单个指令中反转字符串:

mystr = "hello world"
mystr[::-1] # "dlrow olleh"

所以,在一行中:

is_palyndrom = (mystr == mystr[::-1])

答案 1 :(得分:0)

绝对不需要内部while循环,break拼写错误,您将所有字母与第一个字母(word[0])进行比较而不是n信:

while n <= half_word_length:
    if word[n] != word[word_length - n - 1]:
        print('This word is not a palindrome.')
        break
    n += 1
else:
    print('This word is a palindrome.')

正如朱利安指出的那样,还有更多的Pythonic方法。您应该至少使用for循环,而不是在while循环中创建和递增自己的索引。