Python中if语句多or布尔运算符使用错误致按键输出异常的解决
问题分析与解决:随机选中字符对应按键输出异常
核心错误点
- 重复生成随机值:每次
elif判断都调用random.randint(0,6)重新生成索引,导致每次判断的都不是同一个随机选中的字符。比如第一次判断是否为"w"时选了一个字符,判断"a"时又选了另一个,逻辑完全混乱。 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
相关产品推荐
相关产品推荐

