You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Blackjack开发:Keyboard模块多按键等待问题求助

解决Blackjack游戏中keyboard模块多按键等待的问题

我之前开发类似的按键交互程序时也碰到过这个问题,你的核心需求是等待用户按下'h'或's'中的任意一个,再执行对应逻辑,而不是让代码快速循环检测按键。下面给你两个实用的解决方案:

方案1:使用keyboard.read_key()实现精准等待判断

这个方法会阻塞程序,直到用户按下任意键,我们只处理'h'和's'的情况,其他按键直接忽略继续等待:

def hit_or_stand(deck, hand):
    global playing
    print("\nWould you like to Hit or Stand? Enter 'h' or 's'")
    while True:
        # 阻塞等待用户按键
        pressed_key = keyboard.read_key()
        if pressed_key == 'h':
            hit(deck, hand)
            break  # 执行抽牌后退出等待,回到游戏主循环
        elif pressed_key == 's':
            print("Player stands. Dealer is playing.")
            playing = False
            break
        # 其他按键不处理,继续等待合法输入

方案2:利用keyboard.wait()的多键支持

你之前尝试的keyboard.wait('h' or 's')无效,是因为Python的逻辑运算会把'h' or 's'解析为'h'(非空字符串为真值),所以实际上只在等待'h'键。而这个模块其实支持传入按键列表来实现多键等待:

def hit_or_stand(deck, hand):
    global playing
    print("\nWould you like to Hit or Stand? Enter 'h' or 's'")
    # 等待'h'或's'中的任意一个按键,返回按下的键
    pressed_key = keyboard.wait(['h', 's'])
    if pressed_key == 'h':
        hit(deck, hand)
    elif pressed_key == 's':
        print("Player stands. Dealer is playing.")
        playing = False

额外注意事项

  • 这个keyboard模块在Windows系统下可能需要管理员权限才能正常捕获全局按键,如果运行时出现权限问题,记得用管理员身份启动你的程序。
  • 如果你的游戏是基于GUI框架(比如Tkinter、PyQt)开发的,其实框架本身就有按键绑定的API,可能比全局按键模块更适配,但如果已经确定要用这个模块,上面的方案就足够解决问题了。

内容的提问来源于stack exchange,提问作者Cruxer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:29:46