#python #list #file #sum
#python #Список #файл #сумма
Вопрос:
У меня есть список чисел, которые были взяты из файла.
fh = open(<filename>)
for line in fh:
if not line.startswith("X-DSPAM-Confidence:") : continue
num = float(line[20 : ])
print(num)
Вывод:
0.6178
0.6961000000000001
0.7565
0.7625999999999999
0.7556
0.7002
0.7615
Я должен суммировать их все и получить среднее значение («Я не могу использовать sum ()»). Я попытался перебрать их все с помощью ‘for’, чтобы затем суммировать и получить среднее значение с помощью / operator; но я получаю следующую ошибку: объект ‘float’ не может быть повторен.
Что я пробовал:
fh = open(<filename>)
for line in fh:
if not line.startswith("X-DSPAM-Confidence:") : continue
num = float(line[20 : ])
for n in num:
n = n n
print(n)
При этом ошибка объекта ‘float’ не может быть повторена.
Также я попытался добавить числа в массив, чтобы посмотреть, может ли цикл в массиве, но у меня это тоже не сработало.
Комментарии:
1. Из строки 4
num = float(...)
следует, чтоnum
имеет типfloat
иfloat
не является interable
Ответ №1:
Я думаю, вам нужна переменная вне цикла, например:
fh = open(<filename>)
numbers = []
for line in fh:
if not line.startswith("X-DSPAM-Confidence:") : continue
num = float(line[20 : ])
# save num into a list for later use
numbers.append(num)
# perform calculations
total = 0
for num in numbers:
total = num
average = total / len(numbers)
Проблема с вашим кодом заключается в том, что num
это a float
, который вы не можете перебрать.
Комментарии:
1. Также обратите внимание, что OP говорит, что они не могут использовать
sum
(предположительно, потому, что это проблема домашнего задания).2. Извините, что неправильно прочитал вопрос. я внес обновление.
Ответ №2:
Вам нужно накапливать сумму в переменную в вашем цикле for по строкам. Вы также должны посчитать количество строк. Вы можете сделать это в своем коде следующим образом:
fh = open(<filename>)
sum_num = 0 # Initialize the sum to 0
count = 0 # Initialize the counter of lines to 0
for line in fh:
if not line.startswith("X-DSPAM-Confidence:") : continue
num = float(line[20 : ])
sum_num = num # Add your number to the sum
count = 1 # Add 1 to your counter of lines
print(num)
print(sum_num) # Print the sum
print(sum_num/count) # Print average which is just the sum divided by the number of lines
Ответ №3:
Вот простое решение
fh = open(<filename>)
total = 0
for line in fh:
if not line.startswith("X-DSPAM-Confidence:") : continue
num = float(line[20 : ])
total = n
print(total)
Ответ №4:
Вы также можете написать это так, учитывая вашу проблему. Но вам, возможно, придется изменить некоторые биты, потому что ваша формулировка кажется мне немного неясной.
`
fh = open("text.txt")
sum=0
n=0
for line in fh:
if not line.startswith("X-DSPAM-Confidence:") : continue
sum =float(line[20:])
n =1
print("Sum:",sum)
print("Average",sum/n)
`