当前位置: 代码迷 >> python >> python输入错误地记住过去的输入
  详细解决方案

python输入错误地记住过去的输入

热度:52   发布时间:2023-06-13 15:07:22.0

我已经在研究一个问题了几个小时,无法找出为什么它不起作用。 我的代码基本上已经完成,除了一个我无法摆脱的错误。 问题来自edx上Python MIT课程的介绍。 问题集4问题6。

uinput = -1
hand = -1
while True:
    uinput = input('Enter n to deal a new hand, r to replay the last hand, or e to end game:')
    if uinput == 'n':
        hand = dealHand(HAND_SIZE)
        playHand(hand, wordList, HAND_SIZE)
    elif uinput == 'r' and hand == -1:
        print('You have not played a hand yet. Please play a new hand first!')
    elif uinput == 'r' and hand != -1:
        playHand(hand, wordList, HAND_SIZE)
    elif uinput not in ('n', 'r', 'e'):
        print("Invalid command.")
        playGame(wordList)
    else:
        break
    print('')

这是它调用其他功能的代码,但我认为它并不那么重要。 我的问题是,当我按“ e”键时,它应该掉到断头并退出循环。 我第一次按“ e”键时会执行此操作,但是如果在此之前按任何其他键,它会递增,并且需要多次按“ e”键才能使其实际断开。 例如,如果我在按“ e”之前按两次“ x”,则总共需要按“ e”三下才能达到中断。 例如xxeee break。 在尝试调试时,我看到它甚至将uinput值改回'x',就像它正在清空堆栈或其他东西一样。 有人知道为什么会这样吗?

由于您的函数称为playGame(),因此这里存在一个错误:

elif uinput not in ('n','r', 'e'):
    print("Invalid command.")
    playGame(wordList)

当您按“ x”时,您将再次调用playGame。 这会在您当前的playGame循环之上堆叠另一个循环。 尝试删除对playGame(wordList)的调用,它应该可以解决您的错误。