From 04261e11fd6a85a8773b98599ca7415e514b06b3 Mon Sep 17 00:00:00 2001 From: pwg3c2ohs <3417752706@qq.com> Date: Fri, 9 Jan 2026 21:17:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- exam_system.py | 204 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 exam_system.py diff --git a/exam_system.py b/exam_system.py new file mode 100644 index 0000000..de644d5 --- /dev/null +++ b/exam_system.py @@ -0,0 +1,204 @@ +# Python基础知识点考试系统 +# 功能:题库查看、随机抽题考试、成绩统计与错题分析 +# 覆盖知识点:函数、循环、条件判断、列表/字典、文件操作、异常处理 + +import random +import time + +# 初始化题库(使用列表嵌套字典存储,键:题目、选项、正确答案、知识点) +question_bank = [ + { + "question": "Python中定义函数的关键字是?", + "options": ["A. func", "B. def", "C. function", "D. define"], + "answer": "B", + "knowledge": "函数定义" + }, + { + "question": "以下哪个不是Python的基本数据类型?", + "options": ["A. int", "B. str", "C. list", "D. array"], + "answer": "D", + "knowledge": "数据类型" + }, + { + "question": "执行print(10 % 3)的结果是?", + "options": ["A. 3", "B. 1", "C. 0", "D. 3.33"], + "answer": "B", + "knowledge": "算术运算符" + }, + { + "question": "Python中循环语句不包含以下哪个?", + "options": ["A. for", "B. while", "C. do...while", "D. 以上都不是"], + "answer": "C", + "knowledge": "循环结构" + }, + { + "question": "字典的键值对使用什么符号分隔?", + "options": ["A. 逗号", "B. 冒号", "C. 等号", "D. 分号"], + "answer": "B", + "knowledge": "字典类型" + }, + { + "question": "if语句后的条件表达式结尾需要加什么符号?", + "options": ["A. 分号", "B. 冒号", "C. 逗号", "D. 不需要"], + "answer": "B", + "knowledge": "条件判断" + }, + { + "question": "列表的索引从几开始?", + "options": ["A. 0", "B. 1", "C. -1", "D. 任意"], + "answer": "A", + "knowledge": "列表操作" + }, + { + "question": "打开文件的函数是?", + "options": ["A. open()", "B. read()", "C. file()", "D. write()"], + "answer": "A", + "knowledge": "文件操作" + } +] + + +def show_menu(): + """显示系统主菜单""" + print("\n===== Python基础知识点考试系统 =====") + print("1. 查看题库") + print("2. 开始考试") + print("3. 退出系统") + print("====================================") + + +def view_question_bank(): + """查看完整题库功能""" + print("\n===== Python基础题库 =====") + for idx, question in enumerate(question_bank, 1): + print(f"\n{idx}. {question['question']}") + print(" 选项:", " | ".join(question['options'])) + print(f" 正确答案:{question['answer']}") + print(f" 知识点:{question['knowledge']}") + input("\n按回车键返回主菜单...") + + +def start_exam(): + """开始考试核心功能:随机抽题、限时答题、实时判分""" + # 1. 设置考试参数 + exam_time = 5 # 每题答题时间(秒),可调整 + question_num = 5 # 抽取题目数量,可调整 + + # 2. 随机抽取题目(避免重复) + if question_num > len(question_bank): + print(f"题库仅有{len(question_bank)}题,自动调整为全部题目考试") + question_num = len(question_bank) + selected_questions = random.sample(question_bank, question_num) + + # 3. 初始化考试数据 + score = 0 # 总分 + wrong_questions = [] # 存储错题 + total_points = question_num * 20 # 总分100分,每题20分 + + print(f"\n===== 考试开始 =====\n本次考试共{question_num}题,每题{exam_time}秒答题时间,总分{total_points}分") + print("请输入选项(A/B/C/D),输入错误将直接判定为答错!") + + # 4. 逐题答题 + for idx, q in enumerate(selected_questions, 1): + print(f"\n第{idx}题({exam_time}秒):{q['question']}") + print(" 选项:", " | ".join(q['options'])) + + # 限时答题 + try: + start_time = time.time() + user_answer = input("请输入你的答案:").strip().upper() + used_time = time.time() - start_time + + if used_time > exam_time: + print(f"答题超时(用时{used_time:.1f}秒),本题不得分!") + wrong_questions.append({ + "question": q['question'], + "user_answer": "超时未答", + "correct_answer": q['answer'] + }) + continue + + # 判分 + if user_answer == q['answer']: + print("回答正确!") + score += 20 + else: + print(f"回答错误!正确答案是:{q['answer']}") + wrong_questions.append({ + "question": q['question'], + "user_answer": user_answer, + "correct_answer": q['answer'] + }) + except: + print("输入异常,本题判定为答错!") + wrong_questions.append({ + "question": q['question'], + "user_answer": "输入异常", + "correct_answer": q['answer'] + }) + + # 5. 成绩统计与展示 + show_score(score, total_points, wrong_questions) + + # 6. 保存成绩到文件 + save_score(score, total_points, wrong_questions) + + +def show_score(score, total_points, wrong_questions): + """成绩统计与错题展示功能""" + print("\n===== 考试结束 ======") + print(f"你的最终得分:{score}分(总分{total_points}分)") + accuracy = (score / total_points) * 100 if total_points > 0 else 0 + print(f"答题正确率:{accuracy:.1f}%") + + # 展示错题 + if wrong_questions: + print(f"\n===== 错题分析(共{len(wrong_questions)}题)=====") + for idx, wq in enumerate(wrong_questions, 1): + print(f"\n{idx}. 题目:{wq['question']}") + print(f" 你的答案:{wq['user_answer']}") + print(f" 正确答案:{wq['correct_answer']}") + else: + print("\n恭喜!你全部答对了!") + input("\n按回车键返回主菜单...") + + +def save_score(score, total_points, wrong_questions): + """将考试成绩保存到文件(文件操作)""" + try: + with open("exam_result.txt", "a", encoding="utf-8") as f: + f.write(f"\n===== 考试成绩记录 =====\n") + f.write(f"考试时间:{time.strftime('%Y-%m-%d %H:%M:%S')}\n") + f.write(f"得分:{score}分(总分{total_points}分)\n") + f.write(f"正确率:{(score / total_points) * 100:.1f}%\n") + if wrong_questions: + f.write(f"错题数量:{len(wrong_questions)}题\n") + for wq in wrong_questions: + f.write(f"题目:{wq['question']} | 你的答案:{wq['user_answer']} | 正确答案:{wq['correct_answer']}\n") + print("成绩已保存到 exam_result.txt 文件!") + except: + print("成绩保存失败,请检查文件权限!") + + +def main(): + """系统主函数:控制整体流程""" + while True: + show_menu() + try: + choice = int(input("请输入功能编号(1-3):")) + if choice == 1: + view_question_bank() + elif choice == 2: + start_exam() + elif choice == 3: + print("感谢使用Python考试系统,再见!") + break + else: + print("输入错误,请输入1-3之间的数字!") + except ValueError: + print("输入格式错误,请输入数字!") + + +# 程序入口 +if __name__ == "__main__": + main() \ No newline at end of file