如何在 python 中不按回车键从用户那里获取单个密钥

How to get a single key from user without pressing enter in python

我是一个初学者,请原谅我的无知。
我想要做的基本上是从用户那里得到一个输入,它是一个从 1 到 9 的数字或一个 space。我通过浏览这个网站想出了一些代码,我认为这些代码应该可以工作但不能。当我尝试 运行 它时,它什么也没做,没有错误消息或任何东西。

import msvcrt
numInput = 0
while numInput == 0 :
    if msvcrt.kbhit():
        if msvcrt.getch() == "1":
            numInput = "1"
        elif (msvcrt.getch() == "2"):
            numInput = "2"
        elif (msvcrt.getch() == "3"):
            numInput = "3"
        elif (msvcrt.getch() == "4"):
            numInput = "4"
        elif (msvcrt.getch() == "5"):
            numInput = "5"
        elif (msvcrt.getch() == "6"):
            numInput = "6"
        elif (msvcrt.getch() == "7"):
            numInput = "7"
        elif (msvcrt.getch() == "8"):
            numInput = "8"
        elif (msvcrt.getch() == "9"):
            numInput = "9"
        elif (msvcrt.getch() == " "):
            numInput = " "

msvcrt.getch() 读取键。此外,您无需对 numInput 值进行任何操作。

你有:

if msvcrt.getch() == "1":
    numInput = "1"
elif (msvcrt.getch() == "2"):
    numInput = "2"
....

首先 msvcrt.getch() 读取您使用 msvcrt.kbhit() 检测到的密钥。如果它是“1”,那么它将退出循环。如果不是,它将转到第二个 if 和 BLOCKS,直到您再次按下 key。在您按下 python 键后,将根据“2”检查它。等等。因此,如果您按 1,您的代码将很好地退出循环。如果你想用 2 退出,那么你必须按 2 两次(因为首先你检查 1)......你得到了练习。试试这个:

while numInput == 0 :
    if msvcrt.kbhit():
        v = msvcrt.getch()
        if v == "1":
            numInput = "1"
        ...
print(numInput)

注意:这个循环也会独占处理器的一个核心,但那是另一回事了。