[英]Why won't my code work for all palindromes?
我一直在寫一些代碼來取一個字符串並檢查它是否是回文。 除了“axya”或以相同字母開頭和結尾的任何其他非回文外,它似乎適用於大多數事物。 我究竟做錯了什么?
代碼是用python編寫的。
str = str.replace(' ','')
str = list(str)
var_a = 0
var_b = 0
var_c = 0
while var_a < len(str) - 1:
var_b = str[var_a]
if len(str) - var_a == len(str) - 1:
var_c = str[len(str) -2]
else:
if len(str) - var_a < len(str) - 1:
var_a = var_a + 1
var_c = str[len(str) - var_a]
else:
var_c = str[len(str) - 1]\
if var_b == var_c:
return 'true'
else:
return 'false'
var_a += 1
注意這部分:
while var_a < len(str) - 1:
# ...
if var_b == var_c:
return 'true'
else:
return 'false'
函數返回無論var_b
等於或等於var_c
,所以循環只迭代一次,這就是為什么它只測試開始和結束字符。 如果它們是相同的,你應該繼續循環測試其余的字符。
雖然肯定有辦法用循環來做到這一點,但是沒有必要這樣做:
>>> a = "racecar"
>>> a == a[::-1]
True
>>> b = "axya"
>>> b == b[::-1]
False
>>>
[]
是字符串和列表的優秀運算符。 string[::-1]
將返回反轉的字符串。 檢查這是否與字符串前進相同,你有一個回文!
實際上回答你的問題:P
在檢查所有信件之前,你正在返回'false'
。
if var_b == var_c:
return 'true'
else:
return 'false'
應該更像是:
# if these letters are different, the word is not a palindrome
if var_b != var_c:
return 'false'
else:
pass # keep looping
你的程序不應該返回true,直到循環從var_a
到達終點結束,而不會發現任何差異。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.