如何使用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
相关产品推荐
相关产品推荐

