【问题标题】:How to get a single key from user without pressing enter in python如何从用户那里获取单个键而不在python中按Enter
【发布时间】:2017-07-06 20:04:13
【问题描述】:

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

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 = " "

【问题讨论】:

标签: python input msvcrt


【解决方案1】:

msvcrt.getch() 读取键。此外,numInput 值与您无关。

你有:

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

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

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

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

【讨论】:

  • 我还建议,即使它超出了问题的范围,OP 也可以使用类似:if (v in "0123456789") and (len(v) == 1): numInput = v 这样他们就没有相同类型的代码链及以上。
  • 是的。我什至没有走那么远,因为 OP 似乎正在学习编码。我不想在一个步骤中给出太多的改变。 :)
猜你喜欢
  • 2017-01-08
  • 2011-11-14
  • 2017-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 2021-05-24
  • 1970-01-01
相关资源
最近更新 更多