#python
#python
Вопрос:
Это мой код, я обращаюсь к файлу с именем pollution.txt и я пытаюсь найти среднее значение всех чисел в каждой строке, а затем отобразить его.
def month_average(monthlist):
monthlist = open("pollution.txt", 'r')
file = monthlist.readlines()
print("The monthly averages are as follows:")
for line in file:
eachline = list(line.split(","))
count = 0
sum_all = 0
average = []
for x in eachline:
number = int(x)
count = count 1
sum_all = sum_all number
avg = sum_all / count
average.append(round(avg, 1))
return average
the_average = month_average("pollution.txt")
print(the_average)
Это небольшая часть из pollution.txt
132,142,154,151,143,164,158,150,146,78,141,32,141,142,112,113,116,123,123,119,152,123,127,163,142,85,88,151,142,113,114
89,78,67,65,56,98,123,144,179,86,82,90,172,124,156,187,122,154,144,165,87,152,93,157,134,87,167,98,156,145,133
45,73,167,165,122,148,125,128,75,123,182,144,143,33,122,147,122,178,144,138,87,152,93,57,134,87,67,98
67,54,83,45,56,98,92,121,153,115,98,80,59,63,84,121,144,119,103,97,83,75,56,64,81,99,102,114,116,103,97
Комментарии:
1. Сразу же странно, что имя файла встречается дважды. Я предлагаю вам устранить это и просто жестко запрограммировать данные в вашем примере, а затем сообщить нам, что вы получаете и чего ожидали. Вы передаете имя файла monthlist, а затем перезаписываете его файловым объектом.
Ответ №1:
Ваша проблема в том, что вы переназначаете average
каждый цикл for.
Исправленный код:
#!/usr/bin/env python3
def month_average(monthlist):
monthlist = open("pollution.txt", 'r')
file = monthlist.readlines()
average = [] # initialize once only
print("The monthly averages are as follows:")
for line in file:
eachline = list(line.split(","))
count = 0
sum_all = 0
# average = [] # mistake is here
for x in eachline:
number = int(x)
count = count 1
sum_all = sum_all number
avg = sum_all / count
average.append(round(avg, 1))
return average
the_average = month_average("pollution.txt")
print(the_average)
Вывод:
The monthly averages are as follows:
[128.4, 122.3, 117.8, 91.7]
Ответ №2:
Прежде всего, было бы лучше использовать конструкцию «with as» для работы с файлом ввода-вывода. Понимание второго списка, на мой взгляд, будет более читабельным.
В результате код может быть переписан заново:
def average_by_line(line):
data_array = list(map(int, line.split(",")))
return sum(data_array) / len(data_array)
def month_average(monthlist):
with open("pollution.txt", 'r') as monthlist:
file = monthlist.readlines()
averages = [average_by_line(line) for line in file]
return averages
the_average = month_average("pollution.txt")
print(the_average)
Ответ №3:
Простая реализация
def month_average(file_obj):
average = []
with open(file_obj) as fp:
lines = fp.readlines()
for line in lines:
line = line.strip().split(',')
temp = 0
for item in line:
temp = int(item)
average.append(temp/len(line))
return average
reqdAvg = month_average("pollution.txt")
print(reqdAvg)
Ответ №4:
Если в файле будут значения, разделенные запятыми, вы можете использовать модуль csv. В любом случае, если вы передаете имя файла в функцию, вам следует использовать это, а не снова явно вводить имя файла.
import csv
def month_average(monthlist):
with open(monthlist, newline="") as file:
reader = csv.reader(file, delimiter=",")
averages = [round(sum(map(int,line))/len(line)) for line in reader]
return averages
the_average = month_average("pollution.txt")
print(the_average)