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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:50:25