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

如何使用Python3编写满足指定需求的随机考试试题生成程序?

考签生成程序实现方案

现有代码问题梳理

  • 输入校验逻辑缺失:仅做了数值判断,超出30时无提示、无重新输入逻辑,且判断条件为number_input < 30,题数等于30时会进入死循环
  • random.shuffle使用错误:该方法为原地打乱列表,返回值为None,直接转换为字符串写入文件无法得到习题内容
  • 未实现核心需求:没有读取学生列表生成对应姓名的独立考签文件,仅生成了固定名称的单文件
  • 文件操作不规范:未使用上下文管理器管理文件句柄,异常场景下容易出现资源泄漏

正确实现代码

import random

def generate_exam_tickets():
    # 输入校验:获取合法的题数
    while True:
        try:
            question_count = int(input("请输入每位学生的考签习题数量:"))
            if 1 <= question_count <= 30:
                break
            print("题数需在1-30之间,请重新输入")
        except ValueError:
            print("输入内容不是有效数字,请重新输入")
    
    # 读取所有习题,去除每行末尾的空白字符
    with open("exercises.txt", "r", encoding="utf-8") as f:
        exercise_list = [line.strip() for line in f if line.strip()]
    
    # 读取所有学生姓名
    with open("students.txt", "r", encoding="utf-8") as f:
        student_list = [line.strip() for line in f if line.strip()]
    
    # 为每个学生生成考签
    for student in student_list:
        # 随机抽取指定数量的不重复习题
        selected_exercises = random.sample(exercise_list, k=question_count)
        # 生成学生姓名命名的考签文件
        with open(f"{student}.txt", "w", encoding="utf-8") as f:
            for idx, exer in enumerate(selected_exercises, 1):
                f.write(f"{idx}. {exer}\n")

if __name__ == "__main__":
    generate_exam_tickets()

代码说明

  • 输入环节增加了类型校验,避免非数字输入导致程序崩溃
  • 用random.sample直接实现无重复随机抽取指定数量习题,比手动shuffle后切片更简洁
  • 采用with关键字管理文件,不需要手动调用close方法,自动处理资源释放
  • 生成的考签内会自动给习题加序号,可读性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:24:06