首页 > 技术文章 > 面向对象的程序设计——找出绩点最高的学生

ylzchs 2020-07-20 16:34 原文

#通过读取student.txt文件,找出平均绩点最高的学生然后输出他的名字、学分和平均绩点
#class classname[(父类名)]:[成员函数及成员变量]

#__init__构造函数:初始化对象的各属性
#__del__析构函数:销毁对象

举例

 

 

 

记录学生成绩的文件student.txt

 

 编写程序,通过读取student.txt,找出平均绩点最高的学生,然后输出他的名字,学分和平均绩点

 

 

关于此处 self的理解:

1.self代表类的实例,而非类

2.Python中的self用于类的方法中,不可省略,但可以换成其他自己喜欢的词

3.同一个类中调用其他的方法时需要加self

4.一个独立的函数不需要加上self参数,当然,独立的函数加上self也不影响,只是没有必要

 程序完整代码如下:

 1 #通过读取student.txt文件,找出平均绩点最高的学生然后输出他的名字、学分和平均绩点
 2 #class classname[(父类名)]:[成员函数及成员变量]
 3 #__init__构造函数:初始化对象的各属性
 4 #__del__析构函数:销毁对象
 5 class student:  #创建一个student类
 6     def __init__(self,name,hours,qpoints):#通过构造函数初始化内部变量,并保存这些信息。构造函数可以接收float\int\str类型 的参数
 7         self.name=name
 8         self.hours=float(hours)#将hours变量强制转化成float类型,方便后面的计算
 9         self.qpoints=float(qpoints)
10     #这个类应该能够获得信息,所以定义一系列获得信息的方法如下,这些方法允许程序获得一条记录
11     def getname(self):
12         return self.name
13 
14     def gethours(self):#通过这个方法获得学分
15         return self.hours
16 
17     def getqpoints(self):#通过这个方法获得量分数
18         return self.qpoints
19 
20     def gpa(self):#通过这个方法算出绩点
21         return self.qpoints/self.hours
22 
23 def makestudent(infostr):#定义一个函数makestudent(),将student.txt文件中某行的信息赋值给name,hours,qpoints三个变量
24     name,hours,qpoints=infostr.split("\t")
25     return student(name,hours,qpoints)
26 
27 
28 def main():
29     #打开输入的文件
30     filename=input("Entrt name the grade file: ")
31     infile=open(filename,'r')
32     #设置文件中第一个学生的记录为best
33     best=makestudent(infile.readline())
34     #处理文件剩余行数据
35     for line in infile:
36         #将每一行数据转换为一个记录
37         s=makestudent(line)
38         #如果该学生是目前GPA最高的,则记录下来
39     
40     if s.gpa()>best.gpa():
41         best=s
42     infile.close()#关闭文件
43     #打印GPA成绩最高的学生信息
44     print("The best student is :",best.getname())
45     print("hours:",best.gethours())
46     print("GPA:",best.gpa())
47 
48 if __name__=="__main__":
49     main()
50     

 

程序运行结果如下:

 

推荐阅读