我在Windows7系统上使用Python3.6.4(我有Win10和Android等其他系统,但这是我的起点)
INKEY$,对于那些不熟悉BASIC(几乎任何风格)的人来说,是一个检查键盘缓冲区的函数,如果没有数据,它将以字符串或空/空值(“”)的形式返回数据,并清除缓冲区。返回字符串的长度取决于缓冲区中的数据,通常在一次击键时为0、1或2(在过去,快速打字员可以在两次检查之间填充小缓冲区)。不需要输入键(除非您正在寻找输入键),也不处理输入键,并且程序不会暂停,除非已编程完成此操作
暂停者:
a$=""
while a$=""
a$=inkey$
wend
流量断续器:
a=0
while a < 1000
a=a+1
print a
a$=inkey$
if a$<>"" then exit while
wend
快速分析器:
a$=inkey$
if a$<>"" then
rem process input
rem like arrow keys/a w s z for directional movement
rem useful for games and custom editors
end if
我想知道Python是否有一个简单的跨平台函数(即不是10多行代码,除非在可导入的模块/类中),它与INKEY$函数等效?另外,我不想导入游戏模块,只想要一个INKEY$函数等价物(简单、直接、小)
import inkey
a = inkey.inkey()
更新#1: 在我安装readchar模块并纠正Python报告的错误(stdout.write(a)需要是stdout.write(str(a)),因为变量“a”似乎是以字节字符串形式从readchar()函数返回的)之后,使用下面Stratton先生列出的代码,我只得到连续的b'\xff'流和控制台回显字符(如果有任何按键)
将其拆分为仅使用该函数也无济于事:
from readchar import readchar
from sys import stdout
import os
#I like clear screens, and I can not lie
os.system('cls') # For Windows
#os.system('clear') # For Linux/OS X
def inkey():
"INKEY$ function"
return readchar()
#let the processing hit the floor, elsewhere
b=0
step = 1
while b < 1000:
b = b + step
print(b)
#convert bytes to integers
a = int.from_bytes(inkey(), "big")
#remember I keep getting b'\xff' (255) when buffer is empty
if chr(a) == "a":
step = step - 1
a = 255 #don't stop
if chr(a) == "l":
step = step + 1
a = 255 #don't stop
if a != 255:
break
它应该从0数到999,在几乎任何一个按键上停止,“a”会减少步长,“l”会增加步长。相反,它会根据时间在b值之前或之后打印按键,并持续到b=1000。我所做的一切都没有改变
虽然Pauser函数可以替换为input()(i=input(“按Enter键继续”)),但其他两个变量似乎无法如此轻松地更改
最接近您要查找的可能是readchar库
下面是一个类似于旧基本逻辑的示例:
打破循环的数字分别是CTRL-C、CTRL-X和ESC。数字13是回车;该示例在每个回车后写入换行符,以避免覆盖文本
与BASIC中旧的
ASC(A$)
等价的是Python中的ord(a)
。(而且CHR$(A$)
是chr(a)
。)请注意,这将阻止读取。如果没有按键等待,Python将在
a = readchar()
行停止,直到按下一个键为止。为了充分发挥BASIC的INKEY$
功能,您需要在读取数据之前验证某些数据是否正在等待。您可以使用Python的select库来实现这一点这定义了一个
inkey
函数,如果没有等待,则返回空字符串。如果有内容正在读取,则返回readchar()
。循环中每1000000次,它就会告诉另一端的人打字更快在这个版本中,它以大写字母“Q”退出,因为这不会阻止CTRL-C、CTRL-X和ESC完全脱离程序
如果您正在使用Windows,这可能会有问题,因为
select.select
至少有一次在Windows上不起作用。然而,我没有办法测试这一点如果您不需要它看起来完全像BASIC,那么您可能还需要查看pynput。在Python中实现这一点的规范方法可能是设置一个调用函数或方法的事件。脚本继续执行它的操作,如果调用了该函数(或方法),它将取消或修改主循环的操作
相关问题 更多 >
编程相关推荐