学生类:class Student(object):
班级类:class Class(object):
(注意sort和sorted的区别)
import datetime
from dateutil.parser import parse
import time
# 派生两个异常类用来捕捉异常
class PersonTypeError(TypeError):
pass
class PersonValueError(ValueError):
pass
class Student(object):
_num=0 #统计建立人员对象的个数
def __init__(self,index:int,name,birthday,sex,score):
"""
index:学号
name:姓名
birthday:出生日期
sex : 性别
score :成绩
"""
if not (isinstance(name,str) and sex in ('女','男')):
raise PersonValueError(name,sex)
try:
birth=datetime.date(*birthday) #生成一个日期对象
except:
raise PersonValueError('Wrong date:',birthday)
self.birthday = birth
self.index=index
self.name=name
self.sex=sex
self.score=score
Student._num+=1
@classmethod
def num(cls): #获取类中人员计数值
return Student._num
def __lt__(self,another): #根据两个人的学号大小确定记录的大小关系
if not isinstance(another,Student):
raise PersonTypeError(another)
return self.index<another.index
def __str__(self):
"""返回一个对象的描述信息"""
return ('学号:{},姓名:{},年龄:{},性别:{},成绩:{}'.format(self.index,self.name,
datetime.date.today().year-self.birthday.year,self.sex,self.score))
class Class(object):
def __init__(self, class_name, studens_list=None):
if studens_list is None:
studens_list = []
self.class_name=class_name
self.students_list=studens_list
def show_all_students(self):
for student in self.students_list:
print(student)
def find_with_index(self,a:int):
for student in self.students_list:
if a==student.index:
print('学号:{},姓名:{},年龄:{},性别:{},成绩:{}'.format(student.index,student.name,
datetime.date.today().year-student.birthday.year,student.sex,student.score))
else:
return '学号不存在'
def failstudents(self):
for student in self.students_list:
if student.score<60:
print(student)
def add_student(self):
"""添加学生
"""
name = input("请输入姓名")
for student in self.students_list:
if student.name == name:
print("已存在!")
return
birthday = input("请输入出生日期,格式:年-月-日")
birthday = time.strptime(birthday, "%Y-%m-%d")[:3]
index=input("请输入学号")
sex=input("请输入性别")
score=input("请输入成绩")
self.students_list.append( Student(index,name,birthday,sex,score) )
print("添加成功!")
def del_student(self):
"""删除学生
"""
index=input("输入要删除的学生的学号:")
for student in self.students_list:
if student.index == index:
students_list.remove(student)
print("删除成功!")
break
else:
print("没找到!")
def godown_by_score(self):
return sorted(self.students_list,key=lambda s:s.score,reverse=True)
# return self.students_list.sort(key=lambda s:s.score,reverse=True)
if __name__ == '__main__':
student1=Student(101,'张三',(1995,7,3),'男',88)
student2=Student(102,'李四',(1990,2,10),'男',99)
student3=Student(103,'赵二',(2000,9,25),'男',89)
student4=Student(104,'王五',(1992,12,10),'女',59)
student5=Student(104,'王二',(1994,12,10),'女',86)
class1=Class('202班',[student5,student4,student3,student2,student1])
print('-----------------所有学生信息--------------------------------')
class1.show_all_students()
print('------------------根据学号查找学生信息-------------------------------')
class1.find_with_index(101)
print('------------------查找不合格学生信息-------------------------------')
class1.failstudents()
print('------------------根据成绩排序-------------------------------')
x=class1.godown_by_score()
for student in x:
print(student)
print('------------------添加学生信息-------------------------------')
class1.add_student()
print('-----------------所有学生信息--------------------------------')
class1.show_all_students()
-----------------所有学生信息--------------------------------
学号:104,姓名:王二,年龄:27,性别:女,成绩:86
学号:104,姓名:王五,年龄:29,性别:女,成绩:59
学号:103,姓名:赵二,年龄:21,性别:男,成绩:89
学号:102,姓名:李四,年龄:31,性别:男,成绩:99
学号:101,姓名:张三,年龄:26,性别:男,成绩:88
------------------根据学号查找学生信息-------------------------------
学号:101,姓名:张三,年龄:26,性别:男,成绩:88
------------------查找不合格学生信息-------------------------------
学号:104,姓名:王五,年龄:29,性别:女,成绩:59
------------------根据成绩排序-------------------------------
学号:102,姓名:李四,年龄:31,性别:男,成绩:99
学号:103,姓名:赵二,年龄:21,性别:男,成绩:89
学号:101,姓名:张三,年龄:26,性别:男,成绩:88
学号:104,姓名:王二,年龄:27,性别:女,成绩:86
学号:104,姓名:王五,年龄:29,性别:女,成绩:59
------------------添加学生信息-------------------------------
添加成功!
-----------------所有学生信息--------------------------------
学号:104,姓名:王二,年龄:27,性别:女,成绩:86
学号:104,姓名:王五,年龄:29,性别:女,成绩:59
学号:103,姓名:赵二,年龄:21,性别:男,成绩:89
学号:102,姓名:李四,年龄:31,性别:男,成绩:99
学号:101,姓名:张三,年龄:26,性别:男,成绩:88
学号:1111,姓名:接机,年龄:21,性别:男,成绩:90