繁体   English   中英

python function 在应该返回 false 的时候返回 true

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

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