为什么我的代码不适用于所有回文?

时间:2015-07-30 01:11:52

标签: python palindrome

我一直在写一些代码来取一个字符串并检查它是否是回文。除了“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

2 个答案:

答案 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到达终点,而在此过程中没有发现任何差异。