资讯详情

Python56:核心语法-数据容器-总结

📅 2026/10/13 6:28:07 | 华诺云谱 👁 阅读
Python56:核心语法-数据容器-总结
总结Python3.7版本以后字典dict也是有序的但是我们一般是用key来调用而不用索引调用。练习基于现有知识开发一个教务管理系统开发一个教务管理系统在该系统中可以维护和管理学员的成绩信息具体需求如下1. 添加学生信息根据提示录入学生姓名、语文、数学、英语成绩录入完成保存到系统中。2. 修改学生信息要求输入要修改的学生姓名然后再提示输入语文、数学、英语成绩输入完成后修改学员信息。3. 删除学生信息要求输入要删除的学生姓名根据姓名删除学生信息。4. 查询学生信息要求输入要查询的学生姓名根据姓名查询学生信息并输出。5. 列出所有学生遍历所有学生信息并输出。6. 统计班级成绩统计班级语文、数学、英语成绩的最高分、最低分、平均分以及语文、数学、英语最高分和最低分的学员姓名。7. 退出系统。 开发一个教务管理系统实现学生成绩信息的增删改查和统计功能。 使用字典嵌套字典存储数据控制台菜单交互功能如下 1. 添加学生信息录入姓名、语文、数学、英语成绩 2. 修改学生信息根据姓名修改各科成绩 3. 删除学生信息根据姓名删除学生 4. 查询学生信息根据姓名查询并输出信息 5. 列出所有学生遍历输出所有学生信息 6. 统计班级成绩统计各科最高分、最低分、平均分及对应学生姓名 7. 退出系统 数据结构student_info {李思: {chinese: 92, math: 80, english: 78}, 张三: {...}} # 用字典存储所有学生信息外层键是学生姓名内层是各科成绩字典 student_info {} # 菜单文本和你案例的格式保持一致 menu ######### 教务管理系统 ########### # 1. 添加学生信息 2. 修改学生信息 3. 删除学生信息 # # 4. 查询学生信息 5. 列出所有学生 6. 统计班级成绩 # # 7. 退出系统 # ################################# print(欢迎使用教务管理系统 ~) while True: # 1. 打印功能菜单 print(menu) # 2. 获取用户选择的操作 choice input(请选择要执行的操作1-7) # 使用match-case分支判断 match choice: case 1: # 功能1添加学生信息 # 录入学生姓名 stu_name input(请输入学生姓名) # 如果学生已存在不添加并提示 if stu_name in student_info: print(该学生已存在请重新选择 ~) else: # 录入各科成绩并转为整数 chinese int(input(请输入语文成绩)) math int(input(请输入数学成绩)) english int(input(请输入英语成绩)) # 嵌套字典存入学生信息 student_info[stu_name] {chinese: chinese, math: math, english: english} print(f添加【{stu_name}】成功) case 2: # 功能2修改学生信息 stu_name input(请输入要修改的学生姓名) # 如果学生不存在提示错误并跳过本次操作 if stu_name not in student_info: print(该学生不存在请重新选择 ~) continue # 录入新的成绩 new_chinese int(input(请输入新的语文成绩)) new_math int(input(请输入新的数学成绩)) new_english int(input(请输入新的英语成绩)) # 覆盖原有数据完成修改 student_info[stu_name] {chinese: new_chinese, math: new_math, english: new_english} print(f修改【{stu_name}】成功) case 3: # 功能3删除学生信息 stu_name input(请输入要删除的学生姓名) # 如果学生不存在提示错误 if stu_name not in student_info: print(该学生不存在请重新选择 ~) else: # del根据键删除字典元素 del student_info[stu_name] print(f删除【{stu_name}】成功) case 4: # 功能4查询学生信息 stu_name input(请输入要查询的学生姓名) if stu_name not in student_info: print(该学生不存在请重新选择 ~) else: # 取出该学生的成绩字典 score student_info[stu_name] print(f 【{stu_name}】的信息 ) print(f语文成绩{score[chinese]}) print(f数学成绩{score[math]}) print(f英语成绩{score[english]}) case 5: # 功能5列出所有学生信息 # 判断系统中是否有学生 if len(student_info) 0: print(当前系统中没有学生信息) else: print( 所有学生信息 ) # 遍历外层字典取出每个学生姓名和成绩 for stu_name in student_info: score student_info[stu_name] print(f学生姓名{stu_name}语文{score[chinese]}数学{score[math]}英语{score[english]}) case 6: # 功能6统计班级成绩 if len(student_info) 0: print(当前系统中没有学生信息无法统计) else: # 先把所有科目的成绩单独提取出来方便计算 chinese_scores [info[chinese] for info in student_info.values()] math_scores [info[math] for info in student_info.values()] english_scores [info[english] for info in student_info.values()] # 计算语文的最高分、最低分、平均分 chinese_max max(chinese_scores) chinese_min min(chinese_scores) chinese_avg sum(chinese_scores) / len(chinese_scores) # 计算数学的最高分、最低分、平均分 math_max max(math_scores) math_min min(math_scores) math_avg sum(math_scores) / len(math_scores) # 计算英语的最高分、最低分、平均分 english_max max(english_scores) english_min min(english_scores) english_avg sum(english_scores) / len(english_scores) # 找出各科最高分和最低分对应的学生姓名这部分以后会学到 chinese_max_name [name for name, info in student_info.items() if info[chinese] chinese_max] chinese_min_name [name for name, info in student_info.items() if info[chinese] chinese_min] math_max_name [name for name, info in student_info.items() if info[math] math_max] math_min_name [name for name, info in student_info.items() if info[math] math_min] english_max_name [name for name, info in student_info.items() if info[english] english_max] english_min_name [name for name, info in student_info.items() if info[english] english_min] # 输出统计结果 print( 班级成绩统计 ) print(f语文最高分 {chinese_max}{,.join(chinese_max_name)}最低分 {chinese_min}{,.join(chinese_min_name)}平均分 {chinese_avg:.2f}) print(f数学最高分 {math_max}{,.join(math_max_name)}最低分 {math_min}{,.join(math_min_name)}平均分 {math_avg:.2f}) print(f英语最高分 {english_max}{,.join(english_max_name)}最低分 {english_min}{,.join(english_min_name)}平均分 {english_avg:.2f}) case 7: # 功能7退出系统 print(系统退出再见) break case _: # 匹配非法输入 print(非法操作不支持)难点解析if stu_name in student_info: chinese_scores [info[chinese] for info in student_info.values()] 我对这些代码里的运算符in的用法掌握的不太好请帮我分析分析。一、先分两块讲in运算符 你看不懂的列表推导式1.in运算符核心作用in用来判断某个元素是否存在于容器里面返回结果只有两种True/False语法元素 in 容器场景1in用在「字典」你代码里用到的字典分两种查找逻辑变量 in 字典名→只检查外层的键不查值# 你的学生字典 student_info { 李思: {chinese:92, math:80, english:78}, 张三: {chinese:85, math:90, english:88} } stu_name 李思 # if stu_name in student_info判断李思是不是字典里的键 if stu_name in student_info: print(学生存在) else: print(学生不存在)李思是student_info的键 →in结果为True如果写if 92 in student_info只会去匹配键不会匹配成绩返回False如果你想查字典里的值要加.values()# 判断92是不是某个学生的语文成绩字典的值 has_92 92 in [v[chinese] for v in student_info.values()]场景2in用在列表判断数据是否在列表元素里name_list [李思, 张三] print(李思 in name_list) # True print(李四 in name_list) # False场景3in用在字符串判断一个字/短句是否在文本里text 教务管理系统 print(教务 in text) # True print(购物车 in text) # False配套not in取反不存在if 李四 not in student_info: print(该学生不存在)二、拆解你代码里第一句if stu_name in student_info:逐行大白话翻译# stu_name 是用户输入的学生姓名比如 李思 # student_info 是存全部学生的大字典所有学生姓名都是它的键 if stu_name in student_info: # 翻译如果 输入的姓名 是字典里已有的键学生已录入 执行里面的代码 else: 提示学生不存在举个完整小例子你运行就能看懂student_info {李思: {chinese:92}} stu_name input(输入学生名) if stu_name in student_info: print(找到学生了) else: print(没这个学生)三、第二句chinese_scores [info[chinese] for info in student_info.values()]这里面没有in运算符但里面的for ... in ...是循环语法一并给你讲明白1.student_info.values()字典方法.values()取出字典所有的值这里就是每个学生的成绩小字典student_info {李思: {chinese:92}, 张三: {chinese:85}} print(student_info.values()) # 输出dict_values([{chinese: 92}, {chinese: 85}]) # 就是把两个学生的成绩字典全部拿出来2.for info in student_info.values()这里的in是循环专用逐个取出容器里的每一项赋值给info第一次循环info {chinese:92}李思的成绩第二次循环info {chinese:85}张三的成绩3. 整句拆解列表推导式# 完整代码 chinese_scores [info[chinese] for info in student_info.values()] # 等价于普通for循环更好理解 chinese_scores [] # 先建空列表 # 循环把每个学生的成绩字典依次给到info for info in student_info.values(): # 取出当前学生的语文成绩放进列表 chinese_scores.append(info[chinese])运行结果chinese_scores [92, 85]存了全班所有人的语文分数方便算最高最低平均分。四、区分两个容易混淆的in判断运算符x in 容器if判断里用返回True/Falseif 李思 in student_info:作用检查有没有做条件判断循环语法for x in 容器循环遍历用for info in student_info.values():作用把容器里每一个元素挨个取出来循环操作五、配套练习题巩固in的用法# 测试字典 stu_dict {小红: {math:90}, 小刚: {math:75}} # 1. 判断键是否存在if in if 小红 in stu_dict: print(小红在班级里) # 2. not in 判断不存在 if 小明 not in stu_dict: print(小明不在班级里) # 3. for ... in 循环遍历值 math_list [] for score_dict in stu_dict.values(): math_list.append(score_dict[math]) print(全班数学成绩, math_list)运行输出小红在班级里 小明不在班级里 全班数学成绩 [90, 75]声明本篇学习笔记参考黑马程序员相关课程部分素材来源于网络公开资料及本人补充文中为个人整理复盘仅供学习交流使用。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑