Python回文程序中if语句用()与[]导致输出差异的问题
为什么Python中if语句用[]代替()会导致回文判断失效?
问题根源
Python里if语句的条件需要是布尔值(True/False):
- 用
()时,只是对表达式String == String[::-1]做优先级包裹,最终得到的是布尔值结果,能正确触发对应分支。 - 用
[]时,会把表达式结果打包成一个列表。在Python的布尔判断规则里,任何非空的序列(包括列表)都会被视为True——哪怕列表里装的是False,[False]也是非空列表,因此if条件永远成立,只会执行if分支。
代码对比
正常执行的代码(用())
def isapalindrome(String): if (String == String[::-1]): return("is a palindrome!") else: return("is not a palindrome!") String = input("Enter the String of your choice: ") print(isapalindrome(String)) # 补充print,否则无法直接看到返回结果
逻辑失效的代码(用[])
def isapalindrome(String): if [String == String[::-1]]: # 生成非空列表,永远被判断为True return("is a palindrome!") else: return("is not a palindrome!") String = input("Enter the String of your choice: ") print(isapalindrome(String))
实际场景示例
假设输入字符串"abc",String == String[::-1]的结果是False:
- 用
()时,if False会触发else分支,正确返回"is not a palindrome!" - 用
[]时,if [False]因为列表非空被判定为True,错误执行if分支,返回"is a palindrome!"
内容的提问来源于stack exchange,提问作者Sujay Sawant
相关产品推荐
相关产品推荐

