如何处理Python2.7中的“array/list”以使“(int,list)>float”

2024-10-06 07:08:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个功能:

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:

^{pr2}$

注:

  1. 主题字母(a)列表“

  2. findGPA()必须调用findScore()将每个分数字母转换为分数点。

什么是功能体?在

我希望输出应该是:

>>> findGPA(3, ['A', 'B', 'C'])
3.0
>>> findGPA(4, ['B', 'B', 'C', 'B'])
2.75
'''

Tags: in功能forreturnifdef字母分数
3条回答

findGPA实际上并不像您所建议的那样需要它的第一个参数,因为您可以找到等级字母列表的长度。在

您可以使用带列表理解的findScore函数计算每个年级的分数,然后用sum函数求和。最后,用len函数除以得分列表的长度。在

可以这样做:

def findGPA(grades):
    return sum([findScore(x) for x in grades]) / max(len(grades), 1)

这样就可以得到所需的输出:

^{pr2}$

实际上,您不需要两个函数,也可以完全删除find_gpa函数的第一个参数,并使用内置的^{}函数。在

>>> 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

如果您使用的是python3.4或更新版本,则可以使用statistics模块中的^{}函数。在

演示:

^{pr2}$

使用字典计算成绩,然后简单地查找传入列表中的每个年级,除以分数的总和:

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

输出:

^{pr2}$

就我个人而言,我会在一个单一的函数中完成这一切,只需要一张成绩表,你就可以从传递的列表中得到科目的数量,所以num不是真正需要的。在

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

使用对分可以在log(n)时间内搜索排序结构,而不是潜在地查看每个元素。在

相关问题 更多 >