如何在Python中测量按键输入时长(秒级)并实现反应时间评级?
如何在Python中测量按键输入时长并实现反应速度测试
完全可以在Python中实现这个需求,我们可以借助time模块记录时间戳,计算用户按下Enter键的反应时长,再结合你给出的评级规则完成测试。以下是完善后的完整代码:
import random import time print("Welcome to Response Time Tester!") print("You will be asked to press Enter after random amounts of time.") print("How close can you get? ") print() # 获取有效测试轮次 while True: try: rounds = int(input("Enter desired number of rounds: ")) if rounds <= 0: print("Number of rounds must be greater than zero. Try again.") else: break except ValueError: print("Invalid input. Enter a number.") # 存储每轮的反应时长和评级 results = [] for i in range(rounds): # 每轮生成随机等待时长(2-8秒) target_wait = random.randint(2, 8) print(f"\nRound {i+1} of {rounds}") print(f"Press Enter after {target_wait} seconds...") # 记录开始时间 start_time = time.time() # 等待用户按下Enter input() # 记录结束时间并计算反应时长 end_time = time.time() reaction_time = end_time - start_time # 计算与目标时长的差值 time_diff = abs(reaction_time - target_wait) # 根据差值确定评级 if time_diff <= 0.25: rating = "Excellent!" elif time_diff <= 0.5: rating = "Great!" elif time_diff <= 1: rating = "Good!" elif time_diff <= 2: rating = "OK!" else: rating = "Miss" # 保存当前轮次结果 results.append((reaction_time, time_diff, rating)) # 输出当前轮次结果 print(f"Your reaction time: {reaction_time:.2f}s") print(f"Time difference from target: {time_diff:.2f}s | Rating: {rating}") # 汇总所有结果 print("\n--- Test Summary ---") total_reaction = sum(r[0] for r in results) avg_reaction = total_reaction / rounds total_diff = sum(r[1] for r in results) avg_diff = total_diff / rounds print(f"Total rounds completed: {rounds}") print(f"Average reaction time: {avg_reaction:.2f}s") print(f"Average time difference: {avg_diff:.2f}s") # 确定整体评级 if avg_diff <= 0.25: overall_rating = "Excellent!" elif avg_diff <= 0.5: overall_rating = "Great!" elif avg_diff <= 1: overall_rating = "Good!" elif avg_diff <= 2: overall_rating = "OK!" else: overall_rating = "Miss" print(f"Overall performance rating: {overall_rating}")
关键实现说明
- 时间测量:用
time.time()获取当前时间戳,用户按下Enter后再次获取时间戳,两者差值就是按键输入的时长(反应时间)。 - 随机时长:每轮循环内重新生成
target_wait,确保每轮等待时长不同。 - 结果存储:用列表
results保存每轮的反应时间、与目标时长的差值和评级,方便后续汇总。 - 评级逻辑:严格按照你给出的差值区间判定每轮评级,最后通过平均差值计算整体表现评级。
内容的提问来源于stack exchange,提问作者user21330504
相关产品推荐
相关产品推荐

