举例: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()