检查空字符串变量是否填充了某些字符时,表达式始终被评估为true。如果新创建的字符串值为空,则应为false,它不包含任何字符,更不用说要检查的字符了。
当我硬编码不是正在检查表达式的字符的随机字符时,将被评估为false。
difficulty = ''
while difficulty not in 'EMH':
print('Enter difficulty: E - Easy, M - Medium, H - Hard')
difficulty = input().upper()
Run Code Online (Sandbox Code Playgroud)
我希望看到调试器进入while循环。实际发生的情况是它继续经过while块而没有执行。
任何字符串中都存在一个空字符串。因此,你的条件,difficulty not in 'EMH'将评估到False时difficulty等于''; 因此while循环的主体将不会执行。
In [24]: '' not in 'EMH'
Out[24]: False
In [33]: '' in 'EMH'
Out[33]: True
Run Code Online (Sandbox Code Playgroud)
更好的方法可能是通过将该字符串转换EMH为列表,list('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]:
Run Code Online (Sandbox Code Playgroud)
我认为您需要使用的是列表,而不是字符串:
difficulty = ''
while difficulty not in ['E','M','H']:
print('Enter difficulty: E - Easy, M - Medium, H - Hard')
difficulty = input().upper()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |