我有这个功能:
def findScore(g):
gLetter = ["A", "B", "C", "D", "F"]
gPoint = [4.0, 3.0, 2.0, 1.0, 0.0]
for i, v in enumerate(gLetter):
if v==g:
gp = gPoint[i]
return gp
我想接受一些科目,然后通过电话" findScore'来获取每个科目的成绩单。然后再使用一个这样的函数返回GPA:
def findGPA(n, list):
注意到:
主题数量(n)和等级字母列表(列表)"
findGPA()必须调用findScore()将每个成绩字母转换为成绩点。
什么是功能体?
我希望输出应该像:
>>> findGPA(3, ['A', 'B', 'C'])
3.0
>>> findGPA(4, ['B', 'B', 'C', 'B'])
2.75
'''
答案 0 :(得分:4)
使用字典作为成绩分数,然后只需对传入的列表中的每个成绩进行查找,将除以等级数除以:
def grd_dict():
gLetter = ["A", "B", "C", "D", "F"]
gPoint = [4.0, 3.0, 2.0, 1.0, 0.0]
return dict(zip(gLetter, gPoint))
def find_gpa(num, grds):
scores = grd_dict()
return sum((scores[g] for g in grds),0.0) / num
输出:
In [2]: find_gpa(4, ['B', 'B', 'C', 'B'])
Out[2]: 2.75
In [3]: find_gpa(3, ['A', 'B', 'C'])
Out[3]: 3.0
就我个人而言,我会在一个函数中完成所有操作并只取一个成绩列表,你可以从传递的列表中获得主题数量,因此不需要数量。
dict是执行查找的最有效方法,但如果必须使用列表,那么您可以使用与biect文档中的示例密切相关的逻辑:
from bisect import bisect_left
def grade(g):
g_point = [4, 3, 2, 1, 0]
grades = 'ABCDF'
i = bisect_left(grades, g)
return g_point[i]
def find_gpa(grds):
return sum((grade(g) for g in grds), 0.0) / (len(grds) or 1)
(len(grds) or 1)
也会处理一个空列表:
In [44]: find_gpa(['F', 'F', 'F'])
Out[44]: 0.0
In [45]: find_gpa(['B', 'B', 'C', 'B'])
Out[45]: 2.75
In [46]: find_gpa(['A', 'B', 'C'])
Out[46]: 3.0
In [47]: find_gpa([])
Out[47]: 0.0
使用bisect,您可以在log(n)
时间搜索已排序的结构,而不是潜在地查看每个元素。
答案 1 :(得分:2)
findGPA
实际上并不像你提出的那样需要它的第一个参数,因为你可以找到等级字母列表的长度。
您可以将findScore
功能与列表推导结合使用,计算出每个年级的分数,然后将其与sum
函数相加。最后,这除以得分列表的长度,使用len
函数找到。
这可以这样做:
def findGPA(grades):
return sum([findScore(x) for x in grades]) / max(len(grades), 1)
然后给出您想要的输出:
>>> findGPA(['A', 'B', 'C'])
3.0
>>> findGPA(['B', 'B', 'C', 'B'])
2.75
答案 2 :(得分:1)
实际上你不需要两个函数,你也可以完全删除find_gpa
函数的第一个参数并使用内置的len
函数。
>>> gLetter = ["A", "B", "C", "D", "F"]
>>> gPoint = [4.0, 3.0, 2.0, 1.0, 0.0]
>>> mapped_values = dict(zip(gLetter, gPoint))
>>> def find_gpa(score):
... return sum(mapped_values[g] for g in score) / len(score)
...
>>> find_gpa(['A', 'B', 'C'])
3.0
如果您使用的是Python 3.4或更新版,则可以使用mean
模块中的statistics函数。
演示:
>>> from statistics import mean
>>> def find_gpa(score):
... return mean(mapped_values[g] for g in score)
...
>>> find_gpa(['B', 'B', 'C', 'B'])
2.75
>>> find_gpa(['A', 'B', 'C'])
3.0