从成绩数组中查找GPA

时间:2015-10-22 18:17:25

标签: python python-2.7

我想学习一些科目,然后取每个科目的成绩单 通过调用findGradePoint然后返回GPA

def findGradePoint(g):
gradeLetter = ["A", "B", "C", "D", "F"]
gradePoint = [4.0, 3.0, 2.0, 1.0, 0.0]

for i, v in enumerate(gradeLetter):
    if v==g:
        gp = gradePoint[i]

return gp




def findGPA(n, ls):
totGp = 0.0
g = len(str,[ls])
for i in g:
    gp = findGradePoint(i)
    totGp = totGp + gp
return round(totGp / len[g],2)

我不知道如何拆分数组中的每个值以检查每个值的等级点,并将所有值相加,然后将它们除以数组中值的数量。请指导我。

测试文件

import unittest
import a07

a = a07

class Test(unittest.TestCase):
    def testA(self):
        self.assertEqual(a.findGPA(4, ['B','B','B','C']), 2.75)
    def testB(self):
        self.assertEqual(a.findGPA(4, ['B','B','B','A']), 3.25)
    def testC(self):
        self.assertEqual(a.findGPA(7, ['C','C','C','C','B','B','F']), 2)
    def testD(self):
        self.assertEqual(a.findGPA(4, ['C','D','F','B']), 1.5)


def main():
    unittest.main()

if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:0)

要严格关注代码,因为您似乎已经有了一个有效的findGradePoint方法,那么您会遇到很多问题。我使用固定的findGPA方法运行您的代码,并使其正常工作。

解释你做错了什么:

您在方法定义中定义了n,但未使用它。我认为你不需要它。所以你可以删除它。

def findGPA(n, ls):

以下内容不正确,len只接受一个参数。以下是len的文档。所以这应该删除。

g = len(str,[ls])

您的循环如下,因为您不需要g = len(str,[ls])应该更改此内容:

for i in g:

简单地说:

for i in ls

您的总和步骤,可以轻松缩短为:

totGp += gp

你再次没有在这里正确使用len()方法:

return round(totGp / len[g],2)

len是一种方法,您将其视为列表。它用作:

return round(totGp / len(ls), 2)

当您进行所有这些更正时,您的工作方法就在这里:

def findGPA(ls):
    totGp = 0.0
    for i in ls:
        gp = findGradePoint(i)
        totGp += gp
    return round(totGp / len(ls), 2)

演示:

r = findGPA(['A', 'C', 'D'])
print(r)
# output 2.33