我想要做什么
我正在尝试设计带有单圈计时功能的秒表。当您按“L”时,一圈完成,当您按“S”时,所有圈都完成,计时按顺序显示。
在 C++ 中,我可以使用 conio.h 中的函数 _getch() 来做到这一点,这很容易。我想用 python 编写这个程序,因为它会更容易,而且用 C++ 处理时间也很困难。
我仍然在此链接上编写了一个程序(用于立方体计时): Cube timer
问题
没有像 _getch() 这样的函数。这是一个问题,因为在一圈结束时,您不能按一个键和一个回车键,因为这会花费时间并且会刺激用户。
我读的东西
我读到了 curses 库,但可惜它没有 Windows 端口。
我尝试了一个应该根据网站运行的程序。这是来自链接
但它没有用。
我尝试了什么:
msvcrt.getch()
>>> 导入 msvcrt >>> msvcrt.getch() '\xff'
我相信 FF 是 255 的十六进制等价物。
我不明白为什么会这样。
readch()
正如@martineau 中所建议的那样导入 msvcrt
def readch(echo=True): "在 Windows 上获取单个字符。" while msvcrt.kbhit(): # 清除键盘缓冲区 msvcrt.getch() ch = msvcrt.getch() while ch in '\x00\xe0': # 箭头或功能键前缀?msvcrt.getch() ch = msvcrt.getch() # 第二次调用返回实际键码 if echo: msvcrt.putch(ch) return ch.decode()
一个 = []
对于范围内的 i (10): a.append(readch())
我得到的错误:
>>>
Traceback (most recent call last):
File "C:/Python25/1.py", line 30, in <module>
a.append(readch())
File "C:/Python25/1.py", line 25, in readch
return ch.decode()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xff in position 0: ordinal not in range(128)
我需要什么帮助
类似于 _getch() 的函数或在 Windows 机器上工作的等效函数。
机器规格
Python IDLE 2.5.4 或 2.6 或 2.7
视窗 XP SP3