2017-03-17 76 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行上有缩进。一旦我缩进它不会问第一年级是什么,并告诉我没有“自我”变量,并给出了另一个错误。 –