Python程序如何添加计时器实现乘法练习限时答题功能?
乘法限时答题程序实现
基于你现有代码,只需新增「答题计时+超时判断」逻辑即可实现需求,提供两种可直接套用的方案:
方案1:快速跑通(新手友好,改动最少)
该方案依赖轻量第三方库,先在终端执行pip install inputimeout完成安装,之后代码可直接运行,完全适配你原有逻辑:
import random from inputimeout import inputimeout, TimeoutOccurred # 可自定义每道题的答题时长,单位为秒 TIME_LIMIT = 10 F = 1 while F == 1: x = random.randint(1,10) y = random.randint(1,10) Result = y*x print(f"\n请在{TIME_LIMIT}秒内回答:{y} * {x} = ?") try: Input = int(inputimeout(prompt="", timeout=TIME_LIMIT)) except TimeoutOccurred: print(f"超时未作答,答题失败!正确答案是:{Result}") # 超时直接进入下一题,跳过判分逻辑 continue except: print("请输入有效的数字答案!") continue if Result == Input: print("correct") else: print("Wrong, correct result:",Result)
关键说明:
- 修改
TIME_LIMIT的数值,即可调整每道题的允许答题时长 - 内置输入合法性判断,输入字母、符号时程序不会直接崩溃
方案2:纯标准库实现(无需安装依赖,兼容全系统)
如果不想安装第三方库,用Python自带的线程模块即可实现,Windows/macOS/Linux都能正常运行:
import random import time import threading # 可自定义每道题的答题时长,单位为秒 TIME_LIMIT = 10 F = 1 # 全局变量记录用户输入、输入完成状态 user_input = None input_done = False # 子线程专门负责接收用户输入,避免阻塞主线程计时 def get_input(): global user_input, input_done try: user_input = int(input()) except: user_input = None input_done = True while F == 1: # 每轮答题前重置状态,避免上一轮的状态影响下一题 user_input = None input_done = False x = random.randint(1,10) y = random.randint(1,10) Result = y*x print(f"\n请在{TIME_LIMIT}秒内回答:{y} * {x} = ?") # 启动输入子线程 input_thread = threading.Thread(target=get_input) input_thread.daemon = True # 设为守护线程,程序退出时自动结束子线程 input_thread.start() # 主线程循环计时,同时检测输入状态 start_time = time.time() while True: # 已收到用户输入,直接跳出计时循环 if input_done: break # 计时超过阈值,判定超时 if time.time() - start_time >= TIME_LIMIT: print(f"超时未作答,答题失败!正确答案是:{Result}") break # 短暂休眠,降低CPU占用 time.sleep(0.1) # 超时的话直接进入下一题,跳过判分 if time.time() - start_time >= TIME_LIMIT: continue # 输入非有效数字的情况 if user_input is None: print("请输入有效的数字答案!") continue if Result == user_input: print("correct") else: print("Wrong, correct result:",Result)
可选优化项
- 新增得分统计:加全局
score变量,答对时score +=1,答题结束后打印总得分 - 调整出题范围:把
random.randint(1,10)的参数改成需要的范围,比如1-9适配低年级练习 - 增加友好反馈:答对时打印鼓励语,答错/超时提示加油,更适合小朋友使用
- 新增退出逻辑:判断用户输入为
q时,将F设为0即可退出循环,不用强制关闭窗口
内容的提问来源于stack exchange,提问作者Frettchen YT
相关产品推荐
相关产品推荐

