我一直在写一些代码来取一个字符串并检查它是否是回文。除了“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
答案 0 :(得分:2)
请注意这一部分:
while var_a < len(str) - 1:
# ...
if var_b == var_c:
return 'true'
else:
return 'false'
函数返回无论var_b
等于或等于var_c
,所以循环只迭代一次,这就是它只测试开始和结束字符的原因。如果它们是相同的,你应该继续循环测试其余的字符。
答案 1 :(得分:1)
虽然有一种方法可以用循环来做到这一点,但是没有必要这样做:
>>> 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
到达终点,而在此过程中没有发现任何差异。