鱼C论坛

 找回密码
 立即注册
查看: 1943|回复: 11

[已解决]问下 ,如何让代码等待获取单个字符?

[复制链接]
发表于 2022-4-6 16:58:18 | 显示全部楼层 |阅读模式
20鱼币
首先 ,它不是input ,因为input它要按回车
我现在想要的是 ,它有input的那样 ,等待用户键入 ,当键入正确时(例如y或n)) ,则程序继续 ,而键入其他则无响应 ,且不用按回车来确认键入
最佳答案
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
不合法的命令!
请输入命令:

最佳答案

查看完整内容

检测键入多个值是指这样子吗? 在cmd执行(eg: python test.py),不需要手动按回车,输入正确的命令即可, 超过指定长度就不合法,将让你重新输入,执行结果:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
不合法的命令!
请输入命令:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-6 18:15:45 | 显示全部楼层
isdkz 发表于 2022-4-6 17:10
可以使用 python 内置的 msvcrt 模块

...好像没成功...
屏幕截图 2022-04-06 181446.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-6 18:18:34 | 显示全部楼层

使用终端运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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(重复多次键入)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-6 18:22:47 | 显示全部楼层
丨游戏灬需要 发表于 2022-4-6 18:19
import keyboard as kb
import time

你这个只是检测 y 是否被按下,并没真正的获取一个字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-6 18:24:00 | 显示全部楼层

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

你用 input() 试试有没有获取到输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-6 18:49:25 | 显示全部楼层
isdkz 发表于 2022-4-6 18:24
你那个 python 控制台运行是可以获取输入的吗?

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

input是完全没问题的 ,然后键入值确实不需要获取 ,因为能知道键入了哪个键,那么后续需要的值可以手动设置么.我那方案的唯一问题是只能应对单个值的键入 ,而不能检测键入多个值(尽管暂时也不需要对字符串的实时识别 .可能可以依靠同样代码去麻烦些的达成 ,不过那样就不太符合了)
屏幕截图 2022-04-06 184550.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-6 19:45:06 | 显示全部楼层
isdkz 发表于 2022-4-6 19:01
检测键入多个值是指这样子吗?

好的 ,谢谢 ,这个确实可以有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-6 19:45:36 | 显示全部楼层
isdkz 发表于 2022-4-6 19:01
检测键入多个值是指这样子吗?

虽然还没测 ,但收藏了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-6 21:25:21 | 显示全部楼层
丨游戏灬需要 发表于 2022-4-6 19:45
好的 ,谢谢 ,这个确实可以有

不客气

08.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 19:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表