当检查空字符串变量是否填充了特定字符时,表达式总是被评估为真。如果新创建的字符串值为空,则它应该为 false,它不包含任何字符,更不用说要检查的字符了。
当我对一个随机字符进行硬编码时,该字符不是被检查的字符,表达式被评估为 false。
difficulty = ''
while difficulty not in 'EMH':
print('Enter difficulty: E - Easy, M - Medium, H - Hard')
difficulty = input().upper()
我希望看到调试器进入 while 循环。实际发生的是它继续通过 while block 而不执行。
最佳答案
任何字符串中都存在空字符串。因此,当 difficulty
等于 ''
时,您的条件 difficulty not in 'EMH'
将评估为 False
;所以 while 循环体不会被执行。
In [24]: '' not in 'EMH'
Out[24]: False
In [33]: '' in 'EMH'
Out[33]: True
更好的方法可能是通过 list('EMH')
将字符串 EMH
转换为列表,以便像 EM
或EH
,或者一个空字符不会中断你的循环,或者避免它从一开始就开始
另外,正如@Blckknght 所建议的,一个更好的替代方案是使用默认值 None
作为难度。
In [3]: difficulty = None
In [4]: while difficulty not in list('EMH'):
...: print('Enter difficulty: E - Easy, M - Medium, H - Hard')
...: difficulty = input().upper()
...:
Enter difficulty: E - Easy, M - Medium, H - Hard
A
Enter difficulty: E - Easy, M - Medium, H - Hard
B
Enter difficulty: E - Easy, M - Medium, H - Hard
C
Enter difficulty: E - Easy, M - Medium, H - Hard
EM
Enter difficulty: E - Easy, M - Medium, H - Hard
E
In [5]:
关于python - "not in"身份运算符在检查某些字符的空字符串时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56205560/