Python 语言程序设计 面向过程的程序设计(第二阶段-类)举例

举例:GPA计算
 学生课程评估:学分和平均绩点GPA。
 绩点计算以GPA 4分为准则
 一门课程3学分
 同学得了“A”
 3*4=12量分数。
记录学生成绩文件students.dat。 编写程序,通过读取文件找出平均绩点最高的学生,然后输出他的名字、 学分和平均绩点。
类的定义

class classname[(父类名)]:[成员函数及成员变量]
 _init_构造函数: 初始化对象的各属性
 _del_析构函数:销毁对象

初始化方法:
    作用:
        对新创建的对象添加属性等初始化操作
    语法格式:
        class 类名(继承列表):
            def __init__(self [,形参列表])

            def __init__(self, name, hours, qpoints):
                语句块
        注: [] 里的内容代表可省略
    说明:
        1.初始化方法名必须为__init__不可改变
        2.初始化方法会在构造函数创建实例后自动调用,且将实例自身通过第一个参数self传入__init__ 方法
        3.构造函数的实参将通过 __init__ 方法的参数列表传入到 __init__ 方法中
        4.初始化方法内如果需要return语句返回,则只能返回None

# 找到GPA最高的学生
 
class Student:
    def __init__(self, name, hours, qpoints):#构造函数
        self.name = name
        self.hours = float(hours)#学分
        self.qpoints = float(qpoints)#学分绩点
     
    def getName(self):
        return self.name
     
    def getHours(self):
        return self.hours
     
    def getQPoints(self):
        return self.qpoints
     
    def gpa(self):
        return self.qpoints/self.hours#总学分绩点/总学分
    #平均学分绩点则是每门课的学分乘相应绩点后的总和除以总学分,也就是学分绩点和除以总学分
def makeStudent(infoStr):
    name, hours, qpoints = infoStr.split("\t")
    return Student(name, hours, qpoints)
     
def main():
    # 打开输入文件
    #filename = input("Enter name the grade file: ")
    infile=open('students.dat','wt')#以文本写方式打开,只能写文件, 如果文件不存在,创建该文件
    infile.writelines(["Li Si","\t","100","\t","400","\n","Sun Qi","\t","37","\t","125.33","\n"])#写入数据

    infile=open("students.dat", 'r')#以文本方式打开,只能读文件 , 如果文件不存在,会发生异常  
    # 设置文件中第一个学生的记录为best
    best = makeStudent(infile.readline())
 
    # 处理文件剩余行数据
    for line in infile:
        # 将每一行数据转换为一个记录
        s = makeStudent(line)
        # 如果该学生是目前GPA最高的,则记录下来
        if s.gpa() > best.gpa():
            best = s
    infile.close()
 
    # 打印GPA成绩最高的学生信息
    print("The best student is:", best.getName())
    print("hours:", best.getHours())
    print("GPA:", best.gpa())
 
if __name__ == '__main__':
    main()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值