Python 为什么不在代码中给出关于平均值的正确答案

Python 为什么不在代码中给出关于平均值的正确答案,python,for-loop,yield-return,Python,For Loop,Yield Return,我是python新手,我想用以下公式计算学生班级的平均成绩: from statistics import mean import csv def calculate_averages(input_file_name, output_file_name): with open('D:\\p3\\grades.csv', 'r') as f: f = csv.reader(f) namelist=[] averagelist=[]

我是python新手,我想用以下公式计算学生班级的平均成绩:

from statistics import mean
import csv
def calculate_averages(input_file_name, output_file_name):
    with open('D:\\p3\\grades.csv', 'r') as f:
        f = csv.reader(f)
        namelist=[]
        averagelist=[]
        for row in f:
            name = row[0]
            scores = row[1:]
            scores = list(map(int, scores))
            average = mean(scores)
            namelist = name
            averagelist=average
            print(namelist, averagelist)
    yield namelist, averagelist
print(calculate_averages('namelist', 'averagelist'))
我在代码中添加了print n,以查看问题是否存在: 当我使用return时,它会给我:

mahtaab 15.5
Reza 14
Mahyar 15.5
Shamim 17.166666666666668
Milad 13.5
('Milad', 13.5)
当我使用收益率时,它返回:

<generator object calculate_averages at 0x0000019FB6474BA0>


问题是什么?

您可以执行
打印(list(计算平均值('namelist','averagelist'))
打印([i for i in calculate_平均值('namelist','averagelist')))
您正在打印生成器对象。为了获得列表(“生成器的内容”),您必须对其进行迭代,例如将其强制转换为列表:

def bla(): ... 对于范围(10)内的i: ... 产量一 ... >>>打印(bla()) >>>打印(列表(bla())) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 请查看此答案以了解发电机:

或浏览:

返回生成器迭代器的函数。它看起来像一个普通函数,只是它包含用于生成可在for循环中使用的一系列值的yield表达式,或者可以使用next()函数一次检索一个值


(-1)因为不清楚你的问题是什么。您想计算平均值(查看
numpy.mean()
)还是想知道
收益率
收益率
之间的差异?(第一个创建了一个generator对象,它可以动态计算结果;后一个将代码转换为普通函数)列表也会生成相同的结果,只是我的csv中的最后一个file@MahtaabPhy如果这是您想要的,您可能需要在for循环中移动
yield
。你的问题不清楚它只返回csv文件中的最后一行不是学生姓名列表,他们的平均
产量必须与
print
nooo相同我的函数和print comman之间需要一个空行,谢谢!!根据你的评论,我得出了这个解决方案