Python实现带50秒计时器的5题测验:超时自动结束并跳题
实现带50秒计时器的德语测验
针对你的需求,我们可以用Python的threading模块实现计时器与答题逻辑并行运行,让计时器在后台倒计时的同时,你能正常完成答题。下面是适配你需求的完整示例代码,可直接替换你已有的德语题目:
import threading import time # 全局标记:记录时间是否耗尽 time_up = False # 记录已完成的题目数量 completed_questions = 0 def timer(): """后台运行的50秒倒计时函数""" global time_up for remaining in range(50, 0, -1): if time_up: # 如果提前答完所有题,直接终止计时器 break # 实时刷新剩余时间(同一行覆盖显示) print(f"\r剩余时间: {remaining}秒", end="") time.sleep(1) # 时间耗尽时设置标志 if not time_up: time_up = True print("\n时间到!剩余题目将自动跳过") # 替换成你自己的德语题目和答案 questions = [ { "frage": "Was bedeutet 'Haus' auf Englisch?", "antwort": "house" }, { "frage": "Wie sagt man 'Katze' auf Englisch?", "antwort": "cat" }, { "frage": "Was ist die Hauptstadt von Deutschland?", "antwort": "Berlin" }, { "frage": "Wie viel ist 9 + 6?", "antwort": "15" }, { "frage": "Was ist die Farbe von Banane?", "antwort": "gelb" } ] def run_quiz(): global time_up, completed_questions # 启动计时器线程(后台运行,不阻塞答题) timer_thread = threading.Thread(target=timer) timer_thread.daemon = True # 主线程结束时,计时器自动退出 timer_thread.start() # 遍历题目开始测验 for idx, q in enumerate(questions, 1): if time_up: # 检查时间是否耗尽,是则跳过剩余题目 break print(f"\n\n第{idx}题: {q['frage']}") user_answer = input("Deine Antwort: ").strip().lower() # 这里可以替换成你已有的if/elif/else答案判断逻辑 if user_answer == q["antwort"].lower(): print("Richtig!") else: print(f"Falsch. Die richtige Antwort ist: {q['antwort']}") completed_questions += 1 # 测验结束统计结果 print(f"\n--- 测验结束 ---") print(f"完成题目数: {completed_questions}/5") print(f"结束原因: {'时间耗尽' if time_up else '完成所有题目'}") # 启动测验 if __name__ == "__main__": run_quiz()
核心逻辑说明:
- 线程计时器:用
threading.Thread开启独立线程运行倒计时,避免阻塞用户输入答题的操作。daemon=True确保主线程结束时,计时器线程自动关闭。 - 时间耗尽标记:全局变量
time_up用来同步计时器和答题逻辑,时间到或答完题时,两边都会终止对应流程。 - 实时倒计时:用
print(f"\r剩余时间: {remaining}秒", end="")实现同一行刷新倒计时,避免刷屏。 - 题目跳过机制:每道题开始前先检查
time_up状态,若为True则直接跳出循环,跳过剩余题目。
你只需要把questions列表里的内容替换成自己的德语题目和答案,原有if/elif/else的答案判断逻辑也可以直接整合到代码的答案验证部分。
内容的提问来源于stack exchange,提问作者gopnik
相关产品推荐
相关产品推荐

