我正在尝试刚开始使用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"
。我以为是因为它没有在循环外检查,但是非回文不应该导致程序崩溃。
道歉,如果这很难理解,告诉我,我会尝试修理一下:)
答案 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
循环中创建和递增自己的索引。