问下 ,如何让代码等待获取单个字符?
首先 ,它不是input ,因为input它要按回车我现在想要的是 ,它有input的那样 ,等待用户键入 ,当键入正确时(例如y或n)) ,则程序继续 ,而键入其他则无响应 ,且不用按回车来确认键入 本帖最后由 isdkz 于 2022-4-6 19:02 编辑
丨游戏灬需要 发表于 2022-4-6 18:49
input是完全没问题的 ,然后键入值确实不需要获取 ,因为能知道键入了哪个键,那么后续需要的值可以手动设置 ...
检测键入多个值是指这样子吗?
import msvcrt
bytes_ = b''
while True:
print('请输入命令:', end='')
while True:
temp= msvcrt.getch()
bytes_ += temp
print(temp.decode(), end='')
if bytes_ == b'save':
print('\n已保存', end='')
bytes_ = b''
break
if len(bytes_) > 7:
bytes_ = b''
print('\n不合法的命令!', end='')
break
print()
在cmd执行(eg: python test.py),不需要手动按回车,输入正确的命令即可,
超过指定长度就不合法,将让你重新输入,执行结果:
请输入命令:save
已保存
请输入命令:testtttt
不合法的命令!
请输入命令:
本帖最后由 isdkz 于 2022-4-6 17:12 编辑
可以使用 python 内置的 msvcrt 模块
import msvcrt
while True:
print('请输入y或n:', end='')
temp = msvcrt.getch().decode()
if temp == 'y':
print('\n输入了 y')
break
elif temp == 'n':
print('\n输入了 n')
break
print() isdkz 发表于 2022-4-6 17:10
可以使用 python 内置的 msvcrt 模块
...好像没成功... 丨游戏灬需要 发表于 2022-4-6 18:15
...好像没成功...
使用终端运行 isdkz 发表于 2022-4-6 17:10
可以使用 python 内置的 msvcrt 模块
import keyboard as kb
import time
print('键入y或n')
while True:
if kb.is_pressed('y'):
print('键入了y')
time.sleep(0.1)
break
elif kb.is_pressed('n'):
print('键入了n')
time.sleep(0.1)
break
这是我试过可行的 ,可惜它用了两个模块 ,且不用time.sleep的话 ,可能会出现bug(重复多次键入) 丨游戏灬需要 发表于 2022-4-6 18:19
import keyboard as kb
import time
你这个只是检测 y 是否被按下,并没真正的获取一个字符 丨游戏灬需要 发表于 2022-4-6 18:15
...好像没成功...
你那个 python 控制台运行是可以获取输入的吗?
你用 input() 试试有没有获取到输入 isdkz 发表于 2022-4-6 18:24
你那个 python 控制台运行是可以获取输入的吗?
你用 input() 试试有没有获取到输入
input是完全没问题的 ,然后键入值确实不需要获取 ,因为能知道键入了哪个键,那么后续需要的值可以手动设置么.我那方案的唯一问题是只能应对单个值的键入 ,而不能检测键入多个值(尽管暂时也不需要对字符串的实时识别 .可能可以依靠同样代码去麻烦些的达成 ,不过那样就不太符合了) isdkz 发表于 2022-4-6 19:01
检测键入多个值是指这样子吗?
好的 ,谢谢 ,这个确实可以有 isdkz 发表于 2022-4-6 19:01
检测键入多个值是指这样子吗?
虽然还没测 ,但收藏了 丨游戏灬需要 发表于 2022-4-6 19:45
好的 ,谢谢 ,这个确实可以有
不客气{:5_109:}
页:
[1]