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

Python中if语句多or布尔运算符使用错误致按键输出异常的解决

问题分析与解决:随机选中字符对应按键输出异常

核心错误点

  1. 重复生成随机值:每次elif判断都调用random.randint(0,6)重新生成索引,导致每次判断的都不是同一个随机选中的字符。比如第一次判断是否为"w"时选了一个字符,判断"a"时又选了另一个,逻辑完全混乱。
  2. or运算符误用:
    • 条件判断中wasd[random.randint(0,6)] == "h" or "j" or "k"的写法错误,Python会解析为(wasd[...] == "h") or "j" or "k",而非空字符串在布尔判断中为True,所以这个条件永远成立。
    • 按键操作中"h" or "j" or "k"会返回第一个非空字符串"h",所以不管实际选中的是j还是k,都会输出h。

修正后的代码

from pynput.keyboard import Key, Controller
import time
import random

keyboard = Controller()

wasd = ["w","a","s","d","j","h","k"]

for x in range(1,11):
    # 只生成一次随机选中的字符,确保整个判断逻辑基于同一个值
    selected_key = random.choice(wasd)
    if selected_key == "w":
        keyboard.press("w")
        time.sleep(0.5)
        keyboard.release("w")
    elif selected_key == "a":
        keyboard.press("a")
        time.sleep(1)
        keyboard.release("a")
    elif selected_key == "s":
        keyboard.press("s")
        time.sleep(0.1)
        keyboard.release("s")
    elif selected_key == "d":
        keyboard.press("d")
        time.sleep(1)
        keyboard.release("d")
    # 正确判断选中的是h/j/k中的一个
    elif selected_key in ["h", "j", "k"]:
        keyboard.press(selected_key)
        time.sleep(0.03)
        keyboard.release(selected_key)

关于Python中or运算符的正确用法

当需要判断一个值是否等于多个选项中的某一个时,有两种正确写法:

  • 多次使用==和or:selected_key == "h" or selected_key == "j" or selected_key == "k"
  • 更简洁的写法:selected_key in ["h", "j", "k"](推荐,可读性更高)

另外,or运算符是返回第一个为真的值,所以直接写"h" or "j"这种写法只会返回第一个非空字符串,不能用来随机选择或匹配多个值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:59