'''
学生信息库,重点调整check_user_info函数,捕获相关函数判断异常
'''
class NotArgError(Exception):
def __init__(self,message):
self.message = message
class StudentInfo(object):
def __init__(self,students):
self.students = students
def get_all_students(self):
for id_, value in self.students.items():
print('学号:{}, 姓名:{}, 年龄:{}, 班级:{}, 性别:{}'.format(
id_, value['name'], value['age'], value['class_number'], value['sex']))
return self.students
def check_user_info(self,**kwargs):
assert len(kwargs) == 4,'传入的参数必须是4个,name,age,class_number,sex'
if 'name' not in kwargs:
raise NotArgError('缺少学生姓名')
if 'age' not in kwargs:
raise NotArgError('缺少学生年龄')
if 'class_number' not in kwargs:
raise NotArgError('缺少学生班级')
if 'sex' not in kwargs:
raise NotArgError('缺少学生性别')
# 还需要对传入的参数类型进行判断,如何对传入类型进行检测
# isinstance(对比的数据,目标类型) 列:isinstance(1,int)
name_value = kwargs['name']
age_value = kwargs['age']
class_number_value = kwargs['class_number']
sex_value = kwargs['sex']
if not isinstance(name_value,str):
raise TypeError('name应该是字符串类型')
if not isinstance(age_value,int):
raise TypeError('age应该是整形')
if not isinstance(class_number_value,str):
raise TypeError('class_number应该是字符串类型')
if not isinstance(sex_value,str):
raise TypeError('sex_value应该是字符串类型')
# 添加学生信息
def add(self,**kwargs):
try:
self.check_user_info(**kwargs)
except Exception as e:
raise e
self.__add(**kwargs)
# 批量添加
def adds(self,new_students):
for student in new_students:
try:
self.check_user_info(**student)
except Exception as e:
print(e,'问题同学为:',student.get('name'))
continue
self.__add(**student)
def __add(self, **kwargs):
new_id = max(self.students) + 1
self.students[new_id] = {'name': kwargs['name'],
'age': kwargs['age'],
'class_number': kwargs['class_number'],
'sex': kwargs['sex']}
# 学生信息的删除
def delete(self,id_):
if id_ not in self.students.keys():
print('需要删除的学号%s 学生不存在' % id_)
else:
result = self.students.pop(id_)
print('学号为%s 的 %s 同学已被删除' % (id_, result['name']))
# return students
# 批量删除
def deletes(self,*ids):
for id_ in ids:
if id_ not in self.students.keys():
print('需要删除的学号%s 学生不存在' % id_)
else:
result = self.students.pop(id_)
print('学号为%s 的 %s 同学已被删除' % (id_, result['name']))
# 学生信息的修改/更新,student_id作为关键参数传入
def update(self,student_id, **kwargs):
if student_id not in self.students:
print('需要更改的学号%s 学生不存在' % student_id)
try:
self.check_user_info(**kwargs)
except Exception as e:
raise e
self.students[student_id] = kwargs
print('学号为{} {}同学信息更新完成'.format(student_id, kwargs['name']))
#批量更新,传入的是列表,列表里头是字典{唯一的学号+学生信息(又是一个字典)}
def updates(self,update_students):
for stu in update_students:
try:
id_ = list(stu.keys())[0] # 重要,list(伪列表(key))[0]
except IndexError as e:
print(e)
continue
user_info = stu[id_]
try:
self.check_user_info(**user_info)
except Exception as e:
print(e,'问题学生学号是:',id_)
continue
self.students[id_] = user_info
print('所有同学已更新完毕')
def get_by_id(self,student_id):
if student_id not in self.students:
print('需要更改的学号%s 学生不存在' % student_id)
else:
result = self.students[student_id]
print('查询结果:学号为{} 的学生:姓名:{}, 年龄:{}, 班级:{}, 性别:{}'.format(
student_id, result['name'], result['age'], result['class_number'], result['sex']))
# return students.get(student_id) 也可以只用一行代码获取,但是得到的是字典
# 根据关键词查询==>模糊查找匹配
def search_user(self,**kwargs):
assert len(kwargs),'传入的参数个数错误,请传入一个关键词查询'
users = list(self.students.values())
key = None
value = None
result = []
if 'name' in kwargs:
key = 'name'
value = kwargs[key]
elif 'age' in kwargs:
key = 'age'
value = str(kwargs[key])
elif 'class_number' in kwargs:
key = 'class_number'
value = kwargs[key]
elif 'sex' in kwargs:
key = 'sex'
value = kwargs[key]
else:
raise NotArgError('您所查找的关键词不存在')
for user in users:
if value in str(user[key]):
result.append(user)
if len(result) == 0:
return NotArgError('关键词为%s=%s的同学不存在' % (key, value))
else:
return result
students = {1: {'name': 'mark', 'age': 18, 'class_number': 'B', 'sex': 'boy'},
2: {'name': 'nancy', 'age': 17, 'class_number': 'A', 'sex': 'girl'},
3: {'name': 'pall', 'age': 19, 'class_number': 'A', 'sex': 'boy'},
4: {'name': 'Lily', 'age': 18, 'class_number': 'B', 'sex': 'girl'}
}
if __name__ == '__main__':
stu = StudentInfo(students)
re = stu.search_user(name='mark')
print(re)
stu.get_by_id(4)
stu.add(name='lucy',sex='girl',class_number='B',age=18)
stu.get_all_students()
users = [{'name':'Nick','sex':'boy','class_number':'B','age':29},{'name':'Nana','sex':'girl','class_number':'A','age':17}]
stu.adds(users)
stu.get_all_students()
# stu.deletes(2,4)
# stu.get_all_students()
print('===============')
update_users = [{6:{'name': 'Nick.li', 'sex': 'boy', 'class_number': 'C','age':17}},
{7:{'name': 'Nana.zhang', 'sex': 'girl', 'class_number': 'A','age': 17}}]
stu.updates(update_users)
stu.get_all_students()
result = stu.search_user(name='a')
print('===',result)
result = stu.search_user(age=18)
print(result)
# print(stu_all)
# lily_new = {'name':'Lily','age':19,'class_number':'A','sex':'girl'}
# print('更新————————')
# update_student(4,**lily_new)
# update_student(1,name='mark.li',age=18,class_number='B',sex='boy')
# add_student(name='lucy',sex='girl',class_number='B',age=18)
stu-system-test3
最新推荐文章于 2025-12-13 11:28:09 发布
5557

被折叠的 条评论
为什么被折叠?



