繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM