Суммирование и среднее значение с использованием python - PullRequest
1 голос
/ 04 августа 2020
  • Я написал код, который извлекает числа с плавающей запятой из текстового файла и создает список чисел.

  • Моя задача - суммировать последовательные числа и нахождение среднего числа чисел.

  • Мне не разрешено использовать функцию суммы, и я новичок в python .. это код, который я написал до сих пор,

что мне делать, чтобы добавить через список

fh = open(fname)
for line in fh:
    if line.startswith("X-DSPAM-Confidence:") : continue
#    print(line)
count = 0
for line in fh:
    if line.startswith("X-DSPAM-Confidence:"):
        count = count + 1
#       print(count)

for line in fh:
    if line.startswith("X-DSPAM-Confidence:"):
#       print(line)
        xpos = line.find(' ')
#       print(xpos)
        num = line[xpos : ]
#       print(float(num))
        fnum = float(num)       
#       print(fnum)
        
        total = 0
        for i in fnum:
            total += int(i) 
            print(total)

Ошибка: "float объект не повторяется в строке 24 "... строка 24 является четвертой для l oop

Ответы [ 3 ]

2 голосов
/ 04 августа 2020

Сначала открытый файл может повторяться только один раз, и ваш код показывает 4 цикла, начинающихся с for line in fh:. После первого l oop указатель файла достигнет конца файла, и следующие циклы должны немедленно вернуться. По этой причине предпочтительнее использовать with.

Далее где-то в l oop вы получите значение с плавающей запятой в fnum. Просто инициализируйте total перед запуском l oop и добавьте fnum, когда получите его:

total = 0
with open(fname) as fh:
    for line in fh:
        if line.startswith("X-DSPAM-Confidence:"):
    #       print(line)
            xpos = line.find(' ')
    #       print(xpos)
            num = line[xpos : ]
    #       print(float(num))
            fnum = float(num)       
    #       print(fnum)
            total += fnum
    #       print(total)

with гарантирует, что файл будет полностью закрыт в конце l oop.

1 голос
/ 04 августа 2020

fnum - это число с плавающей запятой. Это не массив, поэтому он не повторяется и не может быть повторен в for l oop.

Вам, вероятно, не нужен массив для определения общего и среднего:

fname = "c:\\mbox-short.txt"
fh = open(fname)

count = 0
total = 0
for line in fh:
    if line.startswith("X-DSPAM-Confidence:"):
        xpos = line.find(' ')
        num = line[xpos : ]
        fnum = float(num)       
        total += fnum
        count += 1

print("Total = " + str(total))
print("Average = " + str(total / count))
print("Number of items = " + str(count))
0 голосов
/ 04 августа 2020

В этом случае вам не нужно использовать startWith . Лучше использовать split для каждой строки файла. Каждая строка разделит все слова на список. Затем используйте искомые индексы: X-DSPAM-Confidence: . Если он существует, возьмите соответствующее интересующее значение. В данном случае это номер индекса 1. Ниже приведен код:

total = 0
number_of_items = 0

with open("dat.txt", 'r') as f:
    for line in f:
        fields = line.split()
        if fields != []:
            if fields[0] == "X-DSPAM-Confidence:":
                number_of_items += 1
                total += float(fields[1])

print(total)
print(number_of_items)      

avg = (total/number_of_items)    
print(avg)

Я сохранил ваши данные в текстовом файле с именами «dat.txt».

Надеюсь, это поможет !! !

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