我正在制作一个 playAgain 函数,询问玩家是否想再次玩游戏。我一直在查看代码,我不知道为什么我的第一次迭代不起作用。
这段代码做了三件事:
- 如果用户回答以“y”开头的任何内容,它将返回 true。
- 如果用户回答以“n”开头的任何内容,它将返回 false。
- 如果用户回答任何其他问题,它将循环。
如果没有给出 'y' 或 'n' 答案,下面的代码将循环,但在第一个循环后回答任何内容都不会中断它。我不明白为什么。
def oldPlayAgain():
print('Do you want to play again? (yes or no)')
answer = input().lower()
while True:
if answer.startswith('y'):
return True
elif answer.startswith('n'):
return False
else:
print ('That is not a valid answer.')
print ()
oldPlayAgain()
这个有效。不过好像和第一个差不多?
def playAgain():
answer = ''
while not (answer.startswith('y') or answer.startswith('n')):
print('Do you want to play again? (yes or no)')
answer = input().lower()
if answer.startswith('y'):
return True
elif answer.startswith('n'):
return False
else:
print ('That is not a valid answer.')
print ()
谢谢!
最佳答案
第一个版本的问题是,当再次调用 oldPlayAgain
时,会运行一个新的 while true 循环。绘制调用堆栈很容易看出原因
oldPlayAgain -> Answer invalid call oldPlayAgain
oldPlayAgain -> Answer invalid call oldPlayAgain
oldPlayAgain -> ?
....
并且由于在首次调用函数时输入answer
后无法更改,因此一旦给出无效输入,程序将无法正常存在
oldPlayAgain -> Answer invalid, call oldPlayAgain
oldPlayAgain -> Answer invalid, call oldPlayAgain
oldPlayAgain -> Answer y, return
oldPlayAgain -> Answer invalid, call oldPlayAgain (since `answer` is the same as the one in two level up)
oldPlayAgain -> ?
关于python - 简单的 while 循环不会第二次注册 input(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25716795/