You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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已经永远成立了,所以这个分支根本不会被执行到。

怎么修正呢?

有两种常用的正确写法:

  1. 把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))
  1. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:29:53