Python判断题测验代码优化:实现无重复题目多轮测验
解决Python测验题目重复问题:实现无重复的多轮判断题测验
要解决题目重复的问题,核心思路是从题目池中一次性抽取足够数量的不重复题目,再分配到各个轮次里。因为你需要5轮×5道题=25道不重复题目,所以首先要确保你的题目池至少包含25道题(如果题量不足,程序会报错提示补充)。
下面是修改后的完整代码,保留了原有的计分、轮次展示和结果统计功能,同时彻底避免了题目重复:
import random # 题目池:至少25道不重复的True/False题目 question_pool = [ ("Python是解释型语言", True), ("列表是不可变数据类型", False), ("字典的键必须是可哈希的", True), ("print()函数没有返回值", True), ("for循环可以遍历所有可迭代对象", True), ("int('123')会抛出异常", False), ("Python不支持多线程", False), ("集合中的元素是唯一的", True), ("try-except用于捕获异常", True), ("字符串可以用[]索引", True), ("lambda函数可以包含多条语句", False), ("os模块用于操作文件系统", True), ("布尔值True等价于1", True), ("None是一种数据类型", True), ("元组可以修改元素", False), ("range(5)生成的是[0,1,2,3,4]", True), ("pip是Python的包管理工具", True), ("函数定义必须有return语句", False), ("列表推导式可以简化循环代码", True), ("Python的索引从1开始", False), ("is用于判断两个对象是否是同一个", True), ("float('inf')表示无穷大", True), ("break语句可以终止所有循环", False), ("continue语句跳过当前循环的剩余部分", True), ("__init__是类的构造方法", True) ] def run_quiz(): total_score = 0 total_questions = 0 # 从题目池抽取25道不重复的题目 try: selected_questions = random.sample(question_pool, 25) except ValueError: print("错误:题目池中的题目数量不足25道,请补充题目!") return # 将抽取的题目分成5轮,每轮5道 quiz_rounds = [selected_questions[i:i+5] for i in range(0, 25, 5)] for round_num, round_questions in enumerate(quiz_rounds, 1): print(f"\n=== 第 {round_num} 轮测验 ===") round_score = 0 for q_num, (question, correct_answer) in enumerate(round_questions, 1): total_questions += 1 user_input = input(f"第 {q_num} 题:{question} (True/False) ").strip().capitalize() # 处理用户输入,只接受True/False while user_input not in ["True", "False"]: user_input = input("请输入正确的格式:True 或 False ").strip().capitalize() user_answer = user_input == "True" if user_answer == correct_answer: print("回答正确!") round_score += 1 total_score += 1 else: print(f"回答错误,正确答案是 {correct_answer}") print(f"第 {round_num} 轮得分:{round_score}/5") # 展示最终结果 print("\n=== 测验结束 ===") print(f"总得分:{total_score}/{total_questions}") percentage = (total_score / total_questions) * 100 print(f"正确率:{percentage:.1f}%") if __name__ == "__main__": run_quiz()
关键修改说明
- 使用
random.sample()抽取不重复题目:这个函数会从题目池中随机选出指定数量的不重复元素,彻底避免了重复问题。如果题目池题量不足25道,会抛出异常并提示用户补充。 - 预先分配轮次题目:把抽取的25道题拆分成5个轮次的列表,每轮5道,确保所有轮次的题目都不会重复。
- 保留原有功能:计分逻辑、用户输入校验、轮次和最终结果展示都和原代码保持一致,只是修改了题目获取的方式。
内容的提问来源于stack exchange,提问作者Vivek baghel
相关产品推荐
相关产品推荐

