Python 为什么不在代码中给出关于平均值的正确答案
我是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=[]
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之间需要一个空行,谢谢!!根据你的评论,我得出了这个解决方案