Python年龄计算器代码二级if/else语句始终判定为真问题求助
问题原因
- 核心错误是你误用了列表作为if判断的条件:Python中所有非空的列表(以及其他非空容器,比如元组、集合、字典)的布尔值都为
True,和列表内部元素的值无关。你写的if [y_or_n.startswith('y'), 'definitely', 'I am']:相当于直接判断一个有3个元素的非空列表,所以无论用户输入什么内容,这个判断条件永远成立。 - 你认为之前的版本可以正常工作,实际上之前的版本也存在相同的逻辑错误:
if [question.startswith('y'), 'sure'.lower, 'ok'.lower]:同样是判断非空列表,永远返回True,你觉得它正常只是因为你之前的测试场景没有触发到else分支,本质上else分支永远不会被执行。另外你之前的代码里'sure'.lower没有加调用括号,拿到的是lower方法本身的引用,不是转小写后的字符串,这也是一处错误。
正确写法
多条件判断需要显式用or连接每个判断逻辑,或者判断输入是否在合法值的集合中,示例如下:
# 第二个if的正确写法,注意已经转了小写,匹配的字符串也要用小写 if y_or_n.startswith('y') or y_or_n == 'definitely' or y_or_n == 'i am': print('ok then') else: age_calc() # 更简洁的写法,把固定的合法值放到集合里判断 if y_or_n.startswith('y') or y_or_n in {'definitely', 'i am'}: print('ok then') else: age_calc()
内容的提问来源于stack exchange,提问作者AHMN
相关产品推荐
相关产品推荐

