2017-03-17 150 views
1

我必須爲我的班級製作GPA計算器。它必須取得數學成績並將其轉換爲我們學校的規模。它還必須確定班級是否爲AP或榮譽。 AP增加+1的重量,榮譽增加+5的重量。我們的規模很簡單,如果班級是CP或職業,這只是F = 0 D = 1 C = 2 B = 3 A = 4。我知道最終的GPA沒有正確計算,但我無法弄清楚如何在輸入等級時添加變量points。我究竟做錯了什麼?GPA計算器的python和添加到循環中的變量?

apClass= int(input('How many AP classes are you taking?')) 
honClass= int(input('\nHow many Honors classes are you taking?')) 
g1=int(input('\nWhat is your first grade?')) 
g2=int(input('\nWhat is your second grade?')) 
g3=int(input('\nWhat is your third grade?')) 
g4=int(input('\nWhat is your fourth grade?')) 
points=(apClass*1)+(honClass*.5) 

def GetGrades (g1,g2,g3,g4): 
    if [g1,g2,g3,g4] < 90: 
     points += 4.0 
    elif [g1,g2,g3,g4] >90>80: 
     points += 3.0 
    elif [g1,g2,g3,g4] >70>80: 
     points += 2.0 
    elif [g1,g2,g3,g4] >60>70: 
     points += 1.0 
    elif [g1,g2,g3,g4] < 60: 
     points += 0.0 
    else: 
     return('invalid grade') 

print (points) 
+1

你的問題不清楚。具體說明你在找什麼,以及你得到的錯誤是什麼? – DeA

+2

添加到值不是你的問題;這是你的if/elif語句被破壞的條件。 –

+0

@IanHank這是什麼意思,列表小於整數? –

回答

0

好了,所以這是我的解決問題的辦法:

class CalcGPA: 

def __init__(self): 
    self.g1 = float(input("Please enter grade 1: ")) 
    self.g2 = float(input("Please enter grade 2: ")) 
    self.g3 = float(input("Please enter grade 3: ")) 
    self.g4 = float(input("Please enter grade 4: ")) 
    self.ap = float(input("Please enter total AP classes: ")) 
    self.hn = float(input("Please enter total Honors classes: ")) 
    self.weight = self.ap + (self.hn * 0.5) 
    self.grades_list = [self.g1, self.g2, self.g3, self.g4] 
    self.gpa_list = [] 
    self.gpa = 0 

def conv_grades(self): 
    for i in self.grades_list: 
     if i >= 90: 
      self.gpa_list.append(4) 
     elif 80 <= i <= 89: 
      self.gpa_list.append(3) 
     elif 70 <= i <= 79: 
      self.gpa_list.append(2) 
     elif 60 <= i <= 69: 
      self.gpa_list.append(1) 
     else: 
      self.gpa_list.append(0) 
    self.gpa = (sum(self.gpa_list) + self.weight)/len(self.gpa_list) 

def show_gpa(self): 
    print("Your current GPA as calculated is: {}".format(self.gpa)) 

讓我們打破它,所以你明白什麼怎麼回事,可以微光爲什麼你一些問題。首先,我們這樣做是面向對象編程,因爲我假設你會有多個對象(I.E.學生需要計算他們的成績)。這使您可以將數據封裝到可重用的結構中。雖然我確信我的版本可以大大提高,但這是我在10分鐘內掀起的。所以首先我們定義我們的類,然後定義init。這將初始化我們的開始提示和運行您正在嘗試創建的程序所需的變量。正如你所看到的,我有4個等級,ap類和hn類作爲花車採取和存儲。現在,這是你不太清楚的地方。這些班級加入到整體GPA中的權重爲1,AP爲0.5,榮譽(hn)爲0.5。因此,如果對於AP來說是1分,我認爲沒有理由將任何事情都作爲其已經是整數的數字。隨着0.5的加入,我們會乘以0.5,所以我們得到半分或每個班的榮譽。將這兩個數字加在一起,最後得出最終的分數,這些分數最終會影響我們的gpa。

然後我將存儲在一個簡單列表中的分數存儲在稍後的迭代中。我初始化了我們要計算的gpa值的空白列表,並且現在將我們的最終gpa值設置爲0。

接下來我們將我們的第一個方法定義爲conv_grades()。正如您所看到的,我們使用一個簡單的for循環遍歷列表中每個項目位置處的列表。然後,我們使用If Elif語句返回我們需要正確計算我們的gpa值的值。這附加值,每次循環運行到我們在初始化時創建的gpa_list。

從這裏計算一個GPA是簡單的數學。現在你對這部分也不太清楚,但是我在這裏假設你想要把你的gpa值加起來,並將它們除以提交的類別/等級的總數。 I.E.得到你的GPA分數的平均值來計算一個真正的Gpa。爲此,我們取gpa_list的總和,然後將權重添加到它。之後,我們除以列表的len(),以便將來可擴展,如果你想有更大的等級列表(儘管當然你需要改變你的代碼以允許來自用戶的更多輸入比現在靜態可用。)通過這樣做,我們返回我們的gpa值。

在這一點上,你可以簡單地打印出來,但我決定樂趣,只是另一種方法來打印出我們的全球化地區。這是底部的show_gpa()方法。

現在,如果您不熟悉如何運行代碼,因爲它不是線性的,您需要將它導入到Python解釋器中。

import "whatever you named this file(for demo im calling this gpa.py" 

我們創建一個實例(對象),我們稱之爲:

student_1 = gpa.CalcGPA() # Notice the gpa first, this denotes the filename we just imported 

通過這樣做,它會開始問你所有的變量我們設置INIT()函數下。 。在這一點上,我們已經把我們的對象創建的,並插上我們的數量在輸入這些

我們計算GPA只需鍵入:

student_1.conv_grades() 

這不會輸出任何東西到你的屏幕,雖然,以示gpa只需輸入:

student_1.show_gpa() 

就是這樣!現在希望這會告訴你我至少會怎麼做,希望你能看到你的代碼出了什麼問題,而不是別人已經告訴你的。希望這可以幫助你一些。

P.S.使用接受用戶輸入的程序,您需要進行某種錯誤處理和檢查,以確保它們不會嘗試輸入非法字符。我認爲這超出了你所要求的範圍,但我只是想指出這一點,所以我不會因此而發火。

+0

非常感謝你們的大力幫助 –

+0

歡迎您!不要忘記標記與明星的答案,如果它回答你的問題:)如果你需要任何更多的幫助,請讓我知道。 –

+0

實際上,它表示它期望在init和第一個self.g1行上有縮進。一旦我縮進它不會問第一年級是什麼,並告訴我沒有「自我」變量,並給出了另一個錯誤。 –