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

如何根据用户输入的属性值筛选测试题类对象并随机抽取打印?

解决方案

直接在现有代码基础上扩展即可实现需求,步骤如下:

1. 补充导入必要模块

需要添加random模块用于随机抽取题目:

import random

2. 实现核心功能逻辑

编写函数处理用户输入、题目筛选、随机抽取和内容打印:

def generate_test():
    # 获取用户输入的测试类别和题目数量
    test_name = input("请输入测试类别(如Math):")
    try:
        question_count = int(input("请输入题目数量:"))
    except ValueError:
        print("题目数量必须是整数,请重新输入")
        return
    
    # 筛选出对应类别的题目
    filtered_questions = [q for q in question_instances if q.Relevance == test_name]
    
    # 校验题目数量是否充足
    if len(filtered_questions) == 0:
        print(f"未找到类别为{test_name}的题目")
        return
    if len(filtered_questions) < question_count:
        print(f"该类别仅包含{len(filtered_questions)}道题目,无法抽取{question_count}道")
        return
    
    # 随机抽取指定数量的题目(避免重复抽取)
    selected_questions = random.sample(filtered_questions, question_count)
    
    # 打印题目内容(排除Relevance属性)
    for idx, q in enumerate(selected_questions, 1):
        print(f"\n=== 第{idx}题 ===")
        # 手动指定属性打印,格式更规整
        print(f"题目:{q.Question}")
        print(f"任务:{q.task}")
        print(f"参考:{q.reference}")
        print(f"A选项:{q.aAnswer}")
        print(f"B选项:{q.bAnswer}")
        print(f"C选项:{q.cAnswer}")
        print(f"D选项:{q.dAnswer}")
        print(f"正确答案:{q.letterAnswer}")

如果Question类的属性较多,也可以用遍历对象属性的方式简化打印逻辑:

# 简化版打印逻辑
for idx, q in enumerate(selected_questions, 1):
    print(f"\n=== 第{idx}题 ===")
    for attr_name, attr_value in q.__dict__.items():
        if attr_name != 'Relevance':
            print(f"{attr_name}:{attr_value}")

3. 调用函数执行

在现有代码末尾添加调用语句:

if __name__ == "__main__":
    generate_test()

关键逻辑说明

  • 用列表推导式快速过滤匹配Relevance属性的题目,效率较高
  • 使用random.sample()而非random.choice(),确保不会重复抽取同一道题
  • 添加了输入校验,处理用户输入非整数、无匹配题目、数量不足等异常情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:01:21