python - 简单的 while 循环不会第二次注册 input()

标签 python loops while-loop

我正在制作一个 playAgain 函数,询问玩家是否想再次玩游戏。我一直在查看代码,我不知道为什么我的第一次迭代不起作用。

这段代码做了三件事:

  1. 如果用户回答以“y”开头的任何内容,它将返回 true。
  2. 如果用户回答以“n”开头的任何内容,它将返回 false。
  3. 如果用户回答任何其他问题,它将循环。

如果没有给出 '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/

相关文章:

python - 每次要么是 websocket 要么是 Tornado 宕机了。

python - 当我使用调试版本的 Python 时如何使用 gdb?

python : How to remove rows which has nan values for dict inside list

python - IEEE 754 中公式失败的概率

mysql - 循环处理查询中的每一行

javascript - For In循环,为什么无法通过obj.property访问属性值?

php - 棘手的循环代码

PHP/MySQL 连接 - 嵌套 While?

algorithm - 带有立方迭代器的 while 循环的时间复杂度分析

python - Selenium + Python如何监听元素的变化