“不在”标识运算符在检查某些字符的空字符串时不起作用

2024-09-19 23:34:29 发布

您现在位置:Python中文网/ 问答频道 /正文

检查空字符串变量是否填充了某些字符时,表达式的计算结果始终为true。如果新创建的字符串值为空,则应为false,它不包含任何字符,更不用说检查的字符了。在

当我硬编码一个随机字符时,如果它不是正在检查表达式的字符,则计算结果为false。在

difficulty = ''

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

我希望看到调试器进入while循环。实际发生的是它继续通过while块而不执行。在


Tags: 字符串infalsetrue编码表达式easynot
3条回答

对于do-while循环条件,这是一个很好的例子。但是,python没有。请检查以下款式是否适合您:

while True:
    print('Enter difficulty: E - Easy, M - Medium, H - Hard')
    difficulty = input().upper()
    if difficulty not in 'EMH': #or in ['E', 'M', 'H']
        continue
    else:
        #do some logic
        break

我很喜欢@Emmet B的建议,在循环中使用['E','M','H']而不是字符串。它也是有意义的,因为您希望一个字符作为输入,而不是字符集。在

任何字符串中都存在空字符串。因此,当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或{}之类的东西不会打断循环,或者从一开始就避免它开始

同样,正如@Blckknght建议的那样,更好的选择是使用默认值None来解决困难。在

^{pr2}$

我想你需要的是一个列表,而不是一个字符串:

difficulty = ''

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

相关问题 更多 >