[英]python function returns true when it should return false
我正在尝试编写一个 function 来检查一个字符串是否为回文,但是每个字符串都显示为回文
def is_palindrome(input_string):
x=0
reverse_string = ""
while x<len(input_string):
reverse_string+=input_string[x]
x=x+1
if input_string == reverse_string:
return True
else:
return False
print(is_palindrome("abc")) # Should be False but it return True
在您的代码中,变量“reverse_string”将始终等于“input_string”,因为您只是使用 += 运算符以相同的顺序附加字符。
反转 Python 中的字符串的一种简单方法是使用这样的切片:
def is_palindrome(input_string):
if input_string == input_string[::-1]:
return True
return False
input_string[::-1]
表示“从第一个索引开始到最后一个倒序(-1)”
您的问题在于字符串的反转。 (你的 x 从 0 到 len(input_string)-1 但它应该是 go 反之)
这就是为什么将代码分解成只做一件事的函数很重要(至少在开始时)
在这种情况下有点矫枉过正,但是当您的代码变得更复杂时它会帮助您。
您的 function 可以简化为:
def is_palindrome(input_string):
return input_string == reverse_string(input_string)
如果你看它是不言自明的。 输入字符串是否等于它的反转?
现在我们需要实现 function reverse_string
。
拥有仅反转字符串的 function 的优点是我们可以对其进行大量测试以检查这个特定的 function
在你的情况下,你可以使用负索引,或者你可以从索引设置为 len(input_string)-1 和 go 到 0 开始。
但这也是学习字符串切片以及如何以 Python 方式做事的好时机,因此反向 function 可以写成:
def reverse_string(input_string):
return input_string[::-1]
如果您对字符串切片还没有信心,请随意放置您自己的 reverse_string 实现,但是通过这个 function 您已经分离了两个不同的东西:反转字符串和检查字符串是否为回文。 您甚至可以稍后重用 reverse_string function。
现在我们可以用很多案例测试它,直到我们确信它能按预期工作。
我建议看一下单元测试,对于这样一个简单的问题来说,它似乎太多了,但它会在未来帮助你很多。
只是测试如果你传递一个回文、一个非回文、一个空字符串、一个数字、一个None
会发生什么......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.