почему бы не уступить, не вернуть, дайте мне правильный ответ в моем коде о среднем - PullRequest
0 голосов
/ 27 января 2020

Я новичок в 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 код, чтобы увидеть, где проблема: когда я использую возвращение дает мне:

mahtaab 15.5
Reza 14
Mahyar 15.5
Shamim 17.166666666666668
Milad 13.5
('Milad', 13.5)

когда я использую yield, он возвращает:

<generator object calculate_averages at 0x0000019FB6474BA0>

в чем проблема?

Ответы [ 2 ]

0 голосов
/ 27 января 2020

Вы печатаете объект генератора. Чтобы получить список («содержимое» генератора), вам нужно будет выполнить его итерацию, например, приведя его к списку:

>>> def bla():
...     for i in range(10):
...         yield i
... 
>>> print(bla())
<generator object bla at 0x7f1cd1a770f8>
>>> print(list(bla()))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Посмотрите на этот ответ, чтобы понять генераторы : { ссылка }

Или в https://docs.python.org/3/glossary.html#term -генератор :

Функция, которая возвращает итератор генератора. Она выглядит как обычная функция, за исключением того, что она содержит выражения yield для создания ряда значений, которые можно использовать в for-l oop, или которые можно получить по одному с помощью функции next ().

0 голосов
/ 27 января 2020

Вы можете выполнить print(list(calculate_averages('namelist', 'averagelist'))) или print([i for i in calculate_averages('namelist', 'averagelist')])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...