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

Python中使用not in身份运算符检查空字符串时异常问题求助

问题原因与解决方案

这个问题的核心是Python中空字符串的in运算符行为——在Python里,空字符串''会被判定为是任何字符串的子串,所以'' in 'EMH'返回的是True,那你的循环条件difficulty not in 'EMH'就变成了False,自然直接跳过了循环块。

为什么会这样?因为空字符串代表“零长度的匹配”,它可以匹配任何字符串的开头、字符之间、结尾的位置,所以Python的in运算符会认为空字符串存在于任意字符串中。

修复代码

只需要调整循环条件,先判断变量是否为空,再检查是否不在目标字符集合里就行:

difficulty = ''
while difficulty == '' or difficulty not in 'EMH':
    print('Enter difficulty: E - Easy, M - Medium, H - Hard')
    difficulty = input().upper()

或者利用空字符串在布尔判断中为False的特性,写得更简洁:

difficulty = ''
while not difficulty or difficulty not in 'EMH':
    print('Enter difficulty: E - Easy, M - Medium, H - Hard')
    difficulty = input().upper()

验证逻辑

  • 初始时difficulty是空字符串,not difficulty为True,循环条件成立,进入循环;
  • 如果输入了非E/M/H的字符(比如X),difficulty not in 'EMH'为True,循环继续;
  • 只有当输入了E/M/H其中一个时,两个条件都为False,循环退出。

这样就符合你预期的逻辑了——程序会先进入循环,提示用户输入,直到得到合法的难度选项。

内容的提问来源于stack exchange,提问作者walrath21

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:34:03