# 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()