我想学习一些科目,然后取每个科目的成绩单 通过调用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()
答案 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