已实现随机分类的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
相关产品推荐
相关产品推荐

