Python练习——学生成绩排序(类与对象练习)

题目描述

设计一个学生类(Student),其中的数据成员有:字符串类型sname表示录入的学生姓名,整型值mscore代表学生的数学成绩,整型值cscore代表学生的语文成绩,整型值escore代表学生的英语成绩。

然后要求根据录入的学生成绩(各不相同),输出总分最高的学生姓名和各科目成绩。

输入格式:

输入分为4个部分:

先输入学生姓名,以空格分隔;

然后输入学生的数学成绩(各不相同的正整数),也以空格分隔;

再输入学生的语文数学成绩(各不相同的正整数),也以空格分隔。

最后输入学生的英语数学成绩(各不相同的正整数),也以空格分隔。

学生姓名个数和成绩个数一定会相同。

输出格式:

共一行,为总分最高的学生姓名和各科目成绩,以空格分隔。

输入样例:

jack tom

95 84

90 75

85 90

输出样例:

jack 95 90 85

代码

# 设计一个学生类(Student),其中的数据成员有:
class Student:
# 字符串类型sname表示录入的学生姓名,
    def __init__(self,sname,msocre,cscore,escore):
        self.sname,self.msocre,self.cscore,\
            self.escore = sname,msocre,cscore,escore
        self.res = self.msocre + self.cscore + self.escore
# 整型值mscore代表学生的数学成绩,
# 整型值cscore代表学生的语文成绩,
# 整型值escore代表学生的英语成绩。
    def show(self):
        print('%s %d %d %d'%
              (self.sname,self.msocre,self.cscore,self.escore))
    def __lt__(self, other):
        return self.res < other.res

# 然后要求根据录入的学生成绩(各不相同)
# ,输出总分最高的学生姓名和各科目成绩。
name = input().split(' ')
mscore =list(map(int,input().split(' ')))
cscore = list(map(int,input().split(' ')))
escore =list(map(int,input().split(' ')))
list1 = list()
for i in range(0,len(name)):
    b = Student(name[i],mscore[i],cscore[i],escore[i])
    list1.append(b)
list1.sort()
list1[-1].show()

总结:

  • 既然要比较大小,就要定义比较大小的标准__lt__()函数
  • 想想看,如果有多个第一名你是不是就错了
  • 没想到怎么在输入的时候就创建对象

你可能感兴趣的:(python)