Я использую Python 3.6.4 в системе Windows 7 (у меня есть другие системы, такие как Win 10 и Android, но это моя отправная точка).
INKEY $, для тех не знакомый с BASI C (почти любой вариант), это функция, которая проверяет буфер клавиатуры, возвращая эти данные в виде строки или нулевого / пустого значения (""), если данных не было, и очищает буфер. Длина возвращаемой строки зависит от данных в буфере, обычно 0, 1 или 2 за одно нажатие клавиши (быстрая машинистка могла заполнить небольшой буфер между проверками в старые времена). Клавиша Enter не нужна (если это не то, что вы искали) или обрабатывается, и программа не приостанавливается, если не запрограммирована на это.
Пауза:
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 простую кроссплатформенную функцию (ie не более 10 строк кода, если только не импортируется) модуль / класс), что эквивалентно функции INKEY $? Кроме того, я не хочу импортировать игровой модуль (-и), просто хочу эквивалент функции $ INKEY (простой, прямой, маленький).
import inkey
a = inkey.inkey()
Обновление № 1: после того, как я установил модуль readchar и исправил сообщенную ошибку с помощью Python (stdout.write (a) должен быть stdout.write (str (a)), так как переменная 'a' кажется возвращаемой в виде байтовой строки из функции readchar ()) при использовании код, указанный г-ном Страттоном ниже, я получаю только непрерывный поток символов 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
Предполагается, что b будет отсчитываться от 0 до 999, останавливаясь практически при любом нажатии клавиши, «a» уменьшает шаг, «l» увеличивает его. Вместо этого он печатает нажатие клавиши до или после значения b в зависимости от времени и продолжается до b = 1000. Ничего из того, что я сделал, не изменило.
Хотя функцию Паузера можно заменить на вход () ( i = input («Нажмите Enter, чтобы продолжить»)) два других варианта изменить нельзя так просто, как кажется.