Python中startswith()方法使用异常:输入判断逻辑错误排查
问题分析:询问重玩游戏的Python代码异常原因
核心问题:括号位置错误导致逻辑完全偏离
第一段代码的问题出在方法调用的优先级和括号位置上,我们拆解来看:
原代码中的关键行:
if not input('> '.lower().startswith('y')):
这里你把'> '.lower().startswith('y')作为了input()函数的参数,而不是先获取用户输入再做处理。
错误逻辑拆解:
'> '.lower()结果还是'>',因为这个字符串本身就是小写'>'.startswith('y')结果是False,所以input()的提示文本变成了False——这就是你看到输出里Falseyes/Falseno的原因:False是input的提示文本,后面的yes/no是你输入的内容input(False)会返回你输入的字符串(比如yes),然后not input(...)判断的是输入内容是否为空字符串:只要你输入了内容(不管是yes还是no),not 'yes'和not 'no'都是False,所以if条件永远不成立,只会走else分支输出yes
正确逻辑的对比(第二段代码)
第二段代码把步骤拆解开,先获取用户输入:
again = input('> '.lower()) # 这里其实'>'转小写还是'>',可以直接写input('> ')
然后对用户输入的内容转小写、判断是否以'y'开头,逻辑完全正确,所以能得到预期结果。
修正后的第一段代码:
print('Do you want to play again? (yes or no)') if not input('> ').lower().startswith('y'): print('no') else: print('yes')
把.lower()和.startswith('y')放到input()的返回值上,而不是作用在input的提示文本上即可。
内容的提问来源于stack exchange,提问作者Victor Zhang
相关产品推荐
相关产品推荐

