Python 3 if elif else语句异常:输入非指定名称仍输出JOHNNY!!!
为什么输入任意内容都会输出'JOHNNY!!!'?
嘿,这个问题其实是Python条件判断里的一个经典小坑!咱们来一步步拆解问题出在哪:
你看这段条件判断代码:
if user_name.lower() == 'john' or 'johnny':
这里的逻辑完全不是你预想的那样!在Python里,or运算符的两边必须是完整的布尔表达式,但你这里右边直接写了'johnny'——在Python规则里,非空字符串会被当作True来处理。也就是说,不管左边的user_name.lower() == 'john'是真还是假,整个or表达式的结果永远是True(因为or只要有一边为真,整体就为真)。所以不管你输入什么内容,第一个if分支都会被触发,自然就一直输出JOHNNY!!!了。
同样的问题也出现在第二个elif分支里:
elif user_name.lower() == 'bill' or 'billy':
'billy'同样是一个非空字符串,永远为真,但因为第一个if已经永远成立了,所以这个分支根本不会被执行到。
怎么修正呢?
有两种常用的正确写法:
- 把
or两边都补全为完整的判断表达式:
user_name = input('What is your name?') if user_name.lower() == 'john' or user_name.lower() == 'johnny': print ('JOHNNY!!!') elif user_name.lower() == 'bill' or user_name.lower() == 'billy': print ('BILLY!!!') else: print ('Hello {0}'.format(user_name))
- 用
in运算符简化判断(更推荐,代码更简洁易读):
user_name = input('What is your name?') lower_name = user_name.lower() if lower_name in ('john', 'johnny'): print ('JOHNNY!!!') elif lower_name in ('bill', 'billy'): print ('BILLY!!!') else: print ('Hello {0}'.format(user_name))
这样修改后,代码就会符合你的预期:只有输入john/johnny或者bill/billy时触发对应分支,其他内容会走到else里输出问候语。
内容的提问来源于stack exchange,提问作者Zimm
相关产品推荐
相关产品推荐

