博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python面向对象程序设计
阅读量:4171 次
发布时间:2019-05-26

本文共 1537 字,大约阅读时间需要 5 分钟。

本文我们学习面向对象的程序设计,先学习几个基本概念。

对象包含2种特征:状态和行为。

类:某种类型集合的描述

属性:是类本身的一些特性,属性具体值则会根据每个对象的不同而不同。
方法:类所能实现的行为。
类的定义:
class className[(父类名)]:
    成员变量
    成员函数
父类名是可选的,子类继承父类后,子类将拥有父类的相应属性和方法。
用类定义对象,先调用__init__构造函数,用于初始化对象的各个属性。
销毁对象时,用__del__析构函数。

定义类的成员函数时,必须默认一个变量来代表类定义的对象本身,这个变量的名称可自行定义,下面的例子将使用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()
运行程序,输入输出如下:

最后,我们总结一下面向对象程序设计的基本步骤:

(完)

你可能感兴趣的文章
为何程序员喜欢将INF设置为0x3f3f3f3f?
查看>>
ios::sync_with_stdio(false);
查看>>
20190120 OJ 回文序列的判断
查看>>
20190120 OJ递归
查看>>
leetcode notes:longest substring without repeating charactors
查看>>
蓝桥杯2016省赛 - A1网友年龄
查看>>
链表排序
查看>>
蓝桥杯2016省赛 -A3方格填数
查看>>
蓝桥杯2016省赛 - A4快速排序
查看>>
蓝桥杯2016省赛 - A5消除尾一
查看>>
【位运算总结】 之 异或^
查看>>
【位运算总结】 之 与&
查看>>
蓝桥杯2016省赛 - A8 四平方和
查看>>
【位运算总结】 之 左移运算
查看>>
蓝桥杯2016省赛 - A10最大比例
查看>>
蓝桥杯2016省赛 - C8冰雹数
查看>>
蓝桥杯2018省赛 - A1分数
查看>>
蓝桥杯2018省赛 - A3 乘积尾零
查看>>
蓝桥杯2018省赛 - A4 第几个幸运数
查看>>
命令窗口中javac(即javac.exe)不可用的原因
查看>>