本文我们学习面向对象的程序设计,先学习几个基本概念。
对象包含2种特征:状态和行为。
类:某种类型集合的描述
属性:是类本身的一些特性,属性具体值则会根据每个对象的不同而不同。定义类的成员函数时,必须默认一个变量来代表类定义的对象本身,这个变量的名称可自行定义,下面的例子将使用self变量表示类对象的变量。
我们通过学生成绩计算来举例说明类的定义和数据操作。
GPA计算以4分为准则,学生的成绩是“A”(即4点),“B”(即3点),“C”(即2点),“D”(即1点),“E”(即0点),GPA的计算如下:
由上图可知,GPA=(所有科目的总点数)/(总学分)。
记录学生成绩的文件包含多个学生的记录,每个记录为一行,包括该学生的姓名,总学分和量分数(即所有科目的总点数),学生成绩表如下:
其中 ,第一列是姓名,第二列是某个学生所修课程的总学分,第三列是所修课程的总点数,GPA=(总点数)/(总学分)。
GPA算法描述如下:
下面的python3程序,通过读取文件,找出平均绩点最高的学生,然后输出他的姓名,总学分和平均绩点:
#找到GPA最高的学生
#创建一个Student类,每个Student类型的对象记录一个学生信息
class Student:
def __init__(self,name,scores,qpoints):
self.name=name
self.scores=float(scores)#将字符串类型转换成float类型,便于做算术运算
self.qpoints=float(qpoints)
def getName(self):
return self.name
def getScores(self):
return self.scores
def getQPoints(self):
return self.qpoints
def gpa(self):
return self.qpoints/self.scores
def makeStudent(infoString):
name,scores,qpoints=infoString.split()
return Student(name,scores,qpoints)
def main():
#打开输入文件
fileName=input('Enter name of the grade file:')
f=open(fileName,'r')
#设置文件中第一个学生为best
best=makeStudent(f.readline())
#处理文件中剩余的行数据
for line in f:
#将文件中的每一行数据转换为一个学生对象
s=makeStudent(line)
#如果该学生是目前GPA最高的,则记录下来
if s.gpa()>best.gpa():
best=s
f.close()
#打印GPA成绩最高的学生信息
print('The best student is:',best.getName())
print('scores:',best.getScores())
print('GPA:',best.gpa())
if __name__=='__main__':
main()
运行程序,输入输出如下:
最后,我们总结一下面向对象程序设计的基本步骤:
(完)