python - "not in"身份运算符在检查某些字符的空字符串时不起作用

标签 python python-3.x

当检查空字符串变量是否填充了特定字符时,表达式总是被评估为真。如果新创建的字符串值为空,则它应该为 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 转换为列表,以便像 EMEH,或者一个空字符不会中断你的循环,或者避免它从一开始就开始

另外,正如@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/

相关文章:

python-3.x - 未提取SQLAlchemy OperationalError

linux - RuntimeError : Could not find firefox in your system PATH. 请指定 firefox 二进制位置或安装 firefox

python-3.x - Bokeh:隐藏图例上的某些内容时更新缩放图

python - while 循环比 for 循环快 1000 倍以上?

python - 启动一个包含本地对象的 python 解释器

python - python 中的字符串格式 - 使用循环填充

python - *在数据透视期间*过滤 Pandas 数据透视表

python - 使用 Spotipy 将轨道添加到 Spotify 中的播放列表

python - 我如何判断我的脚本是从 cronjob 运行还是从命令行运行?

python - 名称错误 : global name 'imshow' is not defined but Matplotlib is imported