1. 程式人生 > >【20171014】python_語言設計(8)面向物件程式設計

【20171014】python_語言設計(8)面向物件程式設計

1.計算GPA,返回最高GPA同學

# 找到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(filename, '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()

2.鉛球位置更新

from math import sin, cos, radians
 
class Projectile:
    def __init__(self, angle, velocity, height):
        #根據給定的發射角度、初始速度和位置建立一個投射體物件
        self.xpos = 0.0
        self.ypos = height
        theta = radians(angle)
        self.xvel = velocity * cos(theta)
        self.yvel = velocity * sin(theta)
 
    def update(self, time):
        #更新投射體的狀態
        self.xpos = self.xpos + time * self.xvel
        yvell = self.yvel - 9.8 * time
        self.ypos = self.ypos + time * (self.yvel + yvell) / 2.0
        self.yvel = yvell
 
    def getY(self):
        #返回投射體的角度
        return self.ypos
 
    def getX(self):
        #返回投射體的距離
        return self.xpos

3.面向物件程式設計的特點:封裝、多型和繼承;支援程式碼複用。