Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理Python2.7中的“数组/列表”以使“(int,list)->float”_Python_Python 2.7 - Fatal编程技术网

如何处理Python2.7中的“数组/列表”以使“(int,list)->float”

如何处理Python2.7中的“数组/列表”以使“(int,list)->float”,python,python-2.7,Python,Python 2.7,我有这个功能: 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来记下每个科目的分数字母,然后再使用一个函数返回

我有这个功能:

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

使用字典查找分数,然后在传入的列表中查找每个分数,求和除以分数:

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
就我个人而言,我会在一个函数中完成这一切,只需要一个分数列表,你可以从传入的列表中获得科目的数量,所以num不是真正需要的

dict是进行查找的最有效的方法,但是如果您必须使用列表,那么您可以使用与文档中的示例密切相关的逻辑:

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

使用对分,您可以在logn time中搜索已排序的结构,而不是潜在地查看每个元素。

使用等级分数字典,然后只需在传入的列表中查找每个等级,求和除以等级数:

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
就我个人而言,我会在一个函数中完成这一切,只需要一个分数列表,你可以从传入的列表中获得科目的数量,所以num不是真正需要的

dict是进行查找的最有效的方法,但是如果您必须使用列表,那么您可以使用与文档中的示例密切相关的逻辑:

lengrds或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
使用对分,您可以在logn-time中搜索排序结构,而不是潜在地查看每个元素。

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

您可以使用findScore函数和列表理解来计算每个年级的分数,然后使用sum函数求和。最后,用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
可以这样做:

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
findGPA实际上不需要像您所建议的那样使用它的第一个参数,因为您可以找到等级字母列表的长度

您可以使用findScore函数和列表理解来计算每个年级的分数,然后使用sum函数求和。最后,用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
可以这样做:

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

实际上,你不需要两个函数,你也可以完全删除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或更新版本,则可以使用模块中的函数

演示:


实际上,你不需要两个函数,你也可以完全删除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或更新版本,则可以使用模块中的函数

演示:


findGPA的第一个参数应该做什么?findGPA的第一个参数应该做什么?哦,我只是想从第一个参数做更多的函数。你可能想除以maxlengrades,1以避免数组为空时被零除。@JoachimIsaksson谢谢,我已经改变了答案。哦,我只是想从第一个参数开始做更多的函数。你可能想除以maxlengrades,1以避免在数组为空的情况下被零除。@JoachimIsaksson谢谢,我已经改变了我的答案。将两个功能合并为一个不是更好吗?…除了OP设计之外,还有什么特别的原因需要两个功能吗?@IronFist,如果你在多个用户的循环中反复发现gpa的发言权,我会首先调用scores=grd_dict,然后对每个用户使用该dict,如果每次运行一次调用,我只需在一个函数中完成所有操作。在这种情况下,我只使用了这两个函数来匹配OP。只需通过g级列表,并使用g的len代替numIsn,将两个函数合并为一个不是更好吗?…除了OP设计之外,还有什么特别的原因吗?@IronFist,如果你在一个循环中反复为多个用户找到gpa的发言权,我会首先调用scores=grd_dict,然后为每个用户使用该dict,如果每次运行一次调用,我会在一个函数中完成所有操作。在这个例子中,我只使用了这两个来匹配OP。只需传递等级g的列表,并使用g的len代替num