Python循环打印遍历中间结果 按键响应变量更新异常排查
问题根源
原代码的核心错误是在循环的每个条件判断分支里都单独调用了keyboard.read_key()。这个函数每次被调用都会阻塞等待一次全新的按键输入,不会复用第一次读取到的按键结果:
- 比如你按下一次right arrow,第一个if分支调用
read_key()读到按键值,判断不是left arrow,条件不成立 - 走到下一个elif判断right arrow的分支时,代码会再次调用
read_key(),程序会重新等待新的按键输入,完全不会处理你刚才按下的right,自然无法正常更新duv_idx的值。
修改方案
每次循环只调用一次keyboard.read_key(),把读取到的按键值存入临时变量,后续所有分支都判断这个临时变量的值即可。额外加100ms的短延时,避免按键按下、抬起两个事件被重复识别导致一次按键跳两次数值。
修改后可直接运行的完整代码:
import keyboard import time duv_idx = 10 print(f'Start_Idx = {duv_idx}') while True: # 单次循环仅读取一次按键,结果复用 current_key = keyboard.read_key() # 短延时消抖,避免重复触发 time.sleep(0.1) if current_key == "left arrow": if duv_idx > 1: duv_idx -= 1 print(f'New_Idx = {duv_idx}') elif current_key == "right arrow": if duv_idx < 17: duv_idx += 1 print(f'New_Idx = {duv_idx}') elif current_key == "enter": break print(f'End_Idx = {duv_idx}')
运行验证
依次输入两次right arrow、一次enter,输出完全符合预期:
Start_Idx = 10 New_Idx = 11 New_Idx = 12 End_Idx = 12
内容的提问来源于stack exchange,提问作者brezelbayer
相关产品推荐
相关产品推荐

