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

已实现随机分类的JSON题库Quiz,如何抽取指定数量随机题目?

从JSON题库随机抽题实现方案

你已经完成了随机选择分类(JSON文件)的功能,要实现从选中的JSON中抽取指定数量的随机题目,可以用Python的random.sample()方法——它能从列表中无放回地抽取指定数量的元素,正好满足你的需求(比如从4道题里抽2道)。

修改后的代码

import random
import json

# 假设points、total_points、show_questions已提前定义
while True:
    if len(the_filenames) != 0:
        random_section = random.choice(the_filenames)
        print()
        print(f"随机选中分类: {random_section[:-5]}")
        file_path = r"C:\Users\Tymek\PycharmProjects\pythonProject1\quiz!\ematyka\\" + random_section
        with open(file_path) as file:
            data = json.load(file)
            questions = data["questions"]
            the_filenames.remove(random_section)
            
            # 指定要抽取的题目数量
            num_to_pick = 2
            # 随机抽取指定数量的题目,无重复
            selected_questions = random.sample(questions, num_to_pick)
            
            # 遍历显示选中的题目
            for q in selected_questions:
                show_questions(q)
                print(f"当前得分: {points} / {total_points}")
    if len(the_filenames) == 0:
        print("所有分类已完成!")
        break

关键逻辑说明

  • random.sample(questions, num_to_pick):第一个参数是完整题目列表,第二个是要抽取的题数,返回包含指定数量随机题目的新列表,不会重复抽取同一道题。
  • 替换原代码中遍历所有题目的循环,改为遍历抽样后的列表,实现只展示选中的随机题目。

中文翻译后的题库示例

{
  "questions": [
    {
      "问题": "下列运算中,我们最先执行哪一个?",
      "a": "除法",
      "b": "减法",
      "c": "加法",
      "d": "乘方",
      "正确答案": "d"
    },
    {
      "问题": "计算18-9/3*2的结果",
      "a": 12,
      "b": 6,
      "c": 16,
      "d": 24,
      "正确答案": "a"
    },
    {
      "问题": "下列哪一个不是三角函数?",
      "a": "正切",
      "b": "sangens(无此三角函数)",
      "c": "余弦",
      "d": "余切",
      "正确答案": "b"
    },
    {
      "问题": "三角形内角和是多少?",
      "a": "160度",
      "b": "360度",
      "c": "90度",
      "d": "180度",
      "正确答案": "d"
    }
  ]
}

内容的提问来源于stack exchange,提问作者Tymek Stawarz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:20:36