python使用字典描述学生信息(日常初学作业)

**

使用字典描述学生信息,包括no(学号),name(姓名),score(成绩)等。使用列表存储学生的信息,并根据给定学生姓名查找学生信息。(至少4位学生信息)(建议使用for else 格式)

**

def main():
	students = [{"no":1,"name":"C","score":99},{"no":2,"name":"python","score":90},{"no":3,"name":"C++","score":100},{"no":4,"name":"Lua","score":95}]

	name = input("输入学生姓名:")

	for i in students:
		if i["name"]==name:
			print("学号:",i["no"], "姓名:",i["name"], "成绩:", i["score"])


if __name__ == '__main__':
	main()

在这里插入图片描述
运行如上图》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

<< 为了构建一个综合的学生成绩管理系统,我们可以采用面向对象的设计思想,并结合Python的数据结构(如字典、列表等)以及文件操作来完成需求。 ### 功能模块设计 #### 数据模型定义 我们可以通过`Student`类表示学生信息和成绩,包括姓名学号及各科分数。同时使用一个全局变量或数据库模拟器作为主记录表以管理所有学生的实例。 ```python class Student: def __init__(self, student_id, name): self.student_id = student_id # 学生唯一标识符(学号) self.name = name # 姓名 self.scores = {} # 成绩 {科目: 分数} @property def total_score(self): # 总分属性 return sum(self.scores.values()) def add_score(self, subject, score): # 添加单科成绩 if not (0 <= score <= 100): raise ValueError("Score must be between 0 and 100") self.scores[subject] = score def update_score(self, subject, new_score): # 修改单科成绩 if subject in self.scores: self.add_score(subject, new_score) def delete_subject(self, subject): # 删除某一学科的成绩 if subject in self.scores: del self.scores[subject] # 全局数据容器 students_db = {} def load_data_from_file(filename="student_records.txt"): """从文本文件中加载已有学生信息""" with open(filename) as f: for line in f.readlines(): data = eval(line.strip()) # 安全隐患注意eval用法! sid, name, scores_dict = data['id'], data['name'], data.get('scores', {}) s = Student(sid, name) for subj, sc in scores_dict.items(): try: s.add_score(subj, sc) except Exception as e: print(f"Error loading record ({e})") students_db[sid] = s def save_to_file(filename='student_records.txt'): import json all_students = [{'id':s.student_id, 'name':s.name, 'scores':s.scores} for s in students_db.values()] with open(filename,'w') as f: json.dump(all_students,f,indent=4) def add_student(student_id,name,score={}): if student_id in students_db: print(f"Student ID already exists! Cannot create a duplicate entry.") return False else: stu = Student(student_id,name) [stu.add_score(k,v) for k,v in score.items() ] students_db[student_id]=stu return True def modify_student(student_id,**kwargs): global students_db if student_id not in students_db: print("No such student found!") return None else: target = students_db[student_id] if "add_scores" in kwargs: for subj,new_sc in kwargs["add_scores"].items(): target.update_score(subj,new_sc) elif "delete_subs" in kwargs: for sub in kwargs["delete_subs"]: target.delete_subject(sub) elif "update_name" in kwargs: target.name = kwargs["update_name"] def remove_student(student_id): removed_stu = students_db.pop(student_id,None) if not removed_stu : print("Deletion failed - No matching student.") def query_by_sid(student_id): res=[f"{st.sid}:{st.total_score}"for st in filter(lambda x:x.student_id ==student_id , students_db.values())] return res if len(res)!=0 else ["Not Found"] def sort_by_total_score(order_desc=True): sorted_list =sorted(students_db.values(),key=lambda x :x.total_score,reverse=order_desc ) return [(stud.student_id, stud.total_score ) for stud in sorted_list ] ``` 这段代码实现了基本的功能框架,例如添加新学生、更新现有学生资料等等。 ### 统计分析功能补充 对于统计数据方面的要求,比如求某门课的最高分/最低分/均值,则需要遍历当前系统内的所有学员的相关科目得分: ```python import statistics def get_statistics_for_course(course_name): grades = [] for _, stdt_instance in students_db.items(): grade =stdt_instance.scores.get(course_name,-1) if grade !=-1: grades.append(grade ) if not grades:return {} stats={'highest':max(grades), 'lowest' :min(grades), 'average':statistics.mean(grades)} return stats ``` 上面这个辅助函数会返回给定课程的最大最小与平均成绩集合。 ### 解释说明: 上述实现涵盖了主要的需求点——创建了一个基于内存中的简单“数据库”来保存所有的学生及其对应的考试结果;提供了诸如增删改查的基本CRUD接口,还扩展了关于统计方面的支持。 当然实际部署时还需要进一步考虑异常处理机制完善度等问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值