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

Python开发反应时间测试如何防止用户过早按键导致计时为0

问题根源

出现0.0秒反应时间的原因很简单:程序执行time.sleep()等待的那3-5秒里,用户提前按的回车键会存在系统输入缓冲区里排队,等休眠结束程序走到input()那行时,会直接读到提前存好的回车,相当于瞬间完成输入,计时结果自然接近0。

修复方案

核心逻辑很简单:在打印GO!提示、正式开始计时之前,把输入缓冲区里提前攒的所有按键内容全部清空,这样后续的input()只会等提示出现后用户新按的回车,不会读到提前输入的内容。

下面是改好的跨平台兼容代码(Windows、macOS、Linux都能跑):

import time
import random
import sys

# 适配不同系统的输入清空依赖
try:
    import msvcrt  # Windows系统专用模块
except ImportError:
    import termios  # macOS/Linux系统专用模块
    import tty

def clear_input_buffer():
    """清空输入缓冲区中所有提前输入的内容"""
    if sys.platform.startswith("win"):
        while msvcrt.kbhit():
            msvcrt.getch()
    else:
        termios.tcflush(sys.stdin, termios.TCIOFLUSH)

print("When you see GO! press enter.")
start_check = input("Type y to start:").strip().lower()
if start_check != "y":
    print("---------")
    print("***END***")
    print("---------")
    quit()

print("Get Ready!")
time.sleep(random.randint(3, 5))
# 打印提示前先清掉所有提前按的输入
clear_input_buffer()
print("---------")
print("   GO!   ")
print("---------")
start = time.perf_counter()
input()
end = time.perf_counter()

reaction_time = round(end - start, 3)
print(f"Your reaction time is {reaction_time}s")
改动说明
  • 新增跨平台的输入缓冲区清空函数,在正式出GO提示前执行,彻底屏蔽提前按键的影响
  • 简化了启动输入的判断逻辑:用.strip()自动去掉输入前后的空格,.lower()自动统一大小写,不用再写一长串判断y/ Y/Y的条件
  • 修正了原代码提示的笔误:把原来写错的G0!(数字0)改成了正确的GO!(字母O)
  • 优化了输出格式,结果加了秒单位,可读性更好

额外优化建议:人类的反应速度极限基本在0.1秒以上,如果测出来的结果小于0.1秒,大概率还是误触,可以加个判断提示用户过早按下,重新走测试流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:18:18