丨游戏灬需要 发表于 2022-4-6 16:58:18

问下 ,如何让代码等待获取单个字符?

首先 ,它不是input ,因为input它要按回车
我现在想要的是 ,它有input的那样 ,等待用户键入 ,当键入正确时(例如y或n)) ,则程序继续 ,而键入其他则无响应 ,且不用按回车来确认键入

isdkz 发表于 2022-4-6 16:58:19

本帖最后由 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:10:53

本帖最后由 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()

丨游戏灬需要 发表于 2022-4-6 18:15:45

isdkz 发表于 2022-4-6 17:10
可以使用 python 内置的 msvcrt 模块

...好像没成功...

isdkz 发表于 2022-4-6 18:18:34

丨游戏灬需要 发表于 2022-4-6 18:15
...好像没成功...

使用终端运行

丨游戏灬需要 发表于 2022-4-6 18:19:55

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(重复多次键入)

isdkz 发表于 2022-4-6 18:22:47

丨游戏灬需要 发表于 2022-4-6 18:19
import keyboard as kb
import time



你这个只是检测 y 是否被按下,并没真正的获取一个字符

isdkz 发表于 2022-4-6 18:24:00

丨游戏灬需要 发表于 2022-4-6 18:15
...好像没成功...

你那个 python 控制台运行是可以获取输入的吗?

你用 input() 试试有没有获取到输入

丨游戏灬需要 发表于 2022-4-6 18:49:25

isdkz 发表于 2022-4-6 18:24
你那个 python 控制台运行是可以获取输入的吗?

你用 input() 试试有没有获取到输入

input是完全没问题的 ,然后键入值确实不需要获取 ,因为能知道键入了哪个键,那么后续需要的值可以手动设置么.我那方案的唯一问题是只能应对单个值的键入 ,而不能检测键入多个值(尽管暂时也不需要对字符串的实时识别 .可能可以依靠同样代码去麻烦些的达成 ,不过那样就不太符合了)

丨游戏灬需要 发表于 2022-4-6 19:45:06

isdkz 发表于 2022-4-6 19:01
检测键入多个值是指这样子吗?




好的 ,谢谢 ,这个确实可以有

丨游戏灬需要 发表于 2022-4-6 19:45:36

isdkz 发表于 2022-4-6 19:01
检测键入多个值是指这样子吗?




虽然还没测 ,但收藏了

isdkz 发表于 2022-4-6 21:25:21

丨游戏灬需要 发表于 2022-4-6 19:45
好的 ,谢谢 ,这个确实可以有

不客气{:5_109:}


页: [1]
查看完整版本: 问下 ,如何让代码等待获取单个字符?