Суммирование чисел с плавающей запятой из списка

#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)
 

`