2016-10-09 2 views
0

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

year interest inflation 
1900 4.61 8.1 

Это происходит совсем немного дальше, вплоть до 2008 года я сделал некоторый прогресс с некоторой помощью, любезно germancoder. Я все еще застрял.

Вот как выглядит код на данный момент.

def myTest(file): 
    with open ('filename', 'r') as f: 
      inflation = [] 
      header = 1 
      for line in f: 
       if header !=1: 
        infl = line.split(",")[2] 
        inflation.append(float(infl)) 
        header += 1 

      avgInflation = sum(inflation)/len(inflation) 

    return avgInflation 

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

Фактическое имя файла: Inflation.csv. Я сам сделал простую программу, которая печатает ее в интерпретаторе, которая показывает ее разделенным запятыми, поэтому почему я сделал (",")

+0

Если значение len (инфляция) равно нулю, это означает, что вы никогда ничего не добавляете в свой список инфляции. И вы никогда ничего не добавляете в свой список, потому что вы установили заголовок в 1 и выполняете только действия, когда заголовок не равен 1. –

+0

Вы установили header = 1. Итак, если блок никогда не будет выполнен. Массив инфляции имеет размер 0, деление на нулевую ошибку неизбежно. – acsrujan

+0

Вы передаете 'файл', но не используете его. (Также, плохая идея использовать переменную с тем же именем, что и встроенная.) – tripleee

ответ

0

Ваше условие для добавления к заголовку никогда не будет выполнено, так как header += 1 находится под условием header != 1 и header начальное значение - 1. Поэтому вы перебираете массив и ничего не делаете. В конце вашего метода, где вы вычисляете среднее значение, ваш inflation список по-прежнему пуст, поэтому len(inflation) разрешает 0.

Также вы читаете строки в файле неправильно. Я думаю, вы хотите читать их как строки, используя f.readlines()?

def myTest(file): 
    with open ('filename', 'r') as f: 
      lines = f.readlines() <--- 2 
      inflation = [] 
      header = 1 
      for line in lines: 
       if header !=1: 
        infl = line.split(",")[2] 
        inflation.append(float(infl)) 
       header += 1 <--- 1 

      avgInflation = sum(inflation)/len(inflation) 

    return avgInflation 
+0

Они читают файл правильно. Вызов линий чтения на самом деле будет худшим подходом. –

0

Вы initalizing header = 1 и инициализации значение infl и inflation после проверки, если header не один, а значит, avgInflation = sum(inflation)/len(inflation) эффективно становится:

avgInflation = sum(0/len(0))

Убедитесь, чтобы проверить, что инфляция имеет значение, прежде чем использовать ее в подразделении. Возможно, вы хотели инициализировать header = 0

+0

В верхней части, если я делаю header = 0, он просто сообщает мне, что он не может преобразовать строку в float :( – Anonymous

+0

Я не уверен, что следую этой проблеме. Объявление и присваивание 'header = 0' doesn Я не знаю, как это сделать: – Av4t4r

+0

Извините, что я, как я уже сказал, очень новичок в программировании. Оцените всю помощь! Может ли кто-нибудь объяснить, что такое + =? – Anonymous

-1

Как я вижу, вы инициируете переменную header как 1 вне цикла for. Внутри цикла for вы проверяете, не равен ли header 1, и ничего не делает, если он равен 1. Для цикла никогда не идет внутрь if header !=1: Он просто выполняет итерацию по всему файлу и выходит из цикла без каких-либо действий , В строке 11, len(inflation) есть 0, так как вы никогда ничего не добавляете к нему. Вы должны изменить свой условный цикл или изменить свою переменную header где-нибудь в своем коде.

def myTest(file): 
with open ('filename', 'r') as f: 
     inflation = [] 
     header = 1 
     for line in f: 
      if header !=1: //Never goes inside 
       infl = line.split(",")[2] 
       inflation.append(float(infl)) 
       header += 1 

     avgInflation = sum(inflation)/len(inflation) //Divison by zero 

return avgInflation 
0

Как насчет этого?

def myTest(file): 
    with open ('filename', 'r') as f: 
     inflation = [] 
     header = 1 
     for line in f: 
      if header == 1: 
       header += 1 
       continue 
      else: 
       infl = line.split(",")[2] 
       inflation.append(float(infl)) 

     avgInflation = sum(inflation)/len(inflation) 

    return avgInflation 

Я думаю, что это должно решить проблему.

+0

Прошу прощения за ошибку с предыдущим кодом! –

Смежные вопросы