2016-05-02 4 views
0

Я пытаюсь решить код python для чтения текстового файла, затем выберите какой-либо подобный текст, затем заберите с них числа с плавающей точкой и подсчитайте их среднее значение, , не используя функцию SUM.средние вычисления без использования функции sum в python?

, но у меня есть столбец из списка среднего числа с его номерами до номеров! и последний - мой ответ, но я не могу выбрать последний символ, поскольку python смотрит на него как на одно столбчатое странное число!

это мой код:

count = 0 
total = 0 

while True: 
    inp = raw_input ("Enter file name: ") 
    if inp == 'myfile.txt' : break 

fh = open(inp) 
for line in fh: 
    line = line.rstrip() 
    if line.startswith("my_pattern") : 
     count = count + 1 
     sb = line.split() 
     sc = sb[1] # this gaves me the numbers only from eavh line # 
     value = float(sc) 

     total = total + value 
     average = total/count 
     print average 

ответ:

0.8475  (*this is exactly the first number, I mean it is the average of just one number, Itself !*) 
0.73265  (*this is the average of two numbers, the second number and the number 0.8475*) 
0.728447368421 
0.727035 
0.728385714286 
0.726895454545 
0.725547826087 
0.7268 
0.737112  (this is the answer, but I do not want a column of numbers and by the way, I could not split just this number) 
+4

Тот факт, что вы печатаете среднее значение * точно такое же количество раз, сколько есть строки * должны дать вам большой намек на то, что происходит. Посмотрите внимательно на отступы вашей строки 'print average'; как вы думаете, что произойдет, если вы не указали этот уровень? –

+0

это говорит: имя «среднее» не определено! – Farbod

+0

Вам нужно выставить его за пределами цикла 'for' и добавить' average = 0' перед циклом, чтобы учесть, что в вашем файле нет соответствующих строк. –

ответ

0

Вы печатаете в среднем рассчитаны до сих пор каждый раз, когда вы найти соответствующую строку.

Вот почему вы получаете среднее значение; для первой строки существует только одно значение, поэтому среднее значение одного значения является этим значением. Вы снова печатаете, когда вы обновляете среднее значение для второй линии и т. Д.

Вам нужно всего лишь вычислить среднее значение, когда вы собрали итоговое значение для все линий. При итерации по файлу вам нужно только подсчитать количество совпадающих строк и обновить значение total.

Проложить средний расчет наружныйfor цикл. Примите во внимание, не может быть 0 согласующих линии:

for line in fh: 
    line = line.rstrip() 
    if line.startswith("my_pattern") : 
     count = count + 1 
     sb = line.split() 
     sc = sb[1] # this gaves me the numbers only from eavh line # 
     value = float(sc) 
     total = total + value 

if count: 
    average = total/count 
    print average 
Смежные вопросы