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
相关产品推荐
相关产品推荐

