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

2022-05-21 07:46:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经研究一个问题好几个小时了,不知道为什么它不起作用。我的代码基本上完成了,除了一个我无法摆脱的错误。问题来自麻省理工学院关于edx的Python入门课程。这是习题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”,就像清空堆栈或其他东西一样。有人知道为什么会这样吗?你知道吗


Tags: andto代码newsizenotprinthandwordlistbreakelifuinputplayhand习题
1条回答
网友
1楼 ·

因为函数名为playGame(),所以这里有一个bug:

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

当您按“x”时,您又在调用playGame。这将在当前的playGame循环上堆叠另一个循环。尝试删除对playGame(wordList)的调用,它会修复您的bug。你知道吗