Как запустить цикл for, а затем выполнить вычисления в конце - PullRequest
0 голосов
/ 01 октября 2019

Я работаю над проблемой, когда мне нужно вычислить среднее количество осадков на основе пользовательского ввода number of years и пользовательского ввода inches of each month.

Что я хочу сделать, это:

Рассчитать общий итог каждого года и его среднее значение в конце, вместо того, чтобы делать это в каждой итерации цикла for и IЯ пишу бланк о том, как это сделать.

Вот мой код:

MONTHS = 12
total = 0.0

while True:
  try:
    years_of_rain = int(input('How many years of rainfall would you like to calculate?: '))

    if years_of_rain <= 0 :
        print('Invalid data. You must enter 1 or more years. Try again.')
        continue

    for y in range(years_of_rain) :
        jan = float(input('How many inches of rain fell in January of year ' + str(y + 1) + '?: '))
        feb = float(input('How many inches of rain fell in February of year ' + str(y + 1) + '?: '))
        mar = float(input('How many inches of rain fell in March of year ' + str(y + 1) + '?: '))
        apr = float(input('How many inches of rain fell in April of year ' + str(y + 1) + '?: '))
        may = float(input('How many inches of rain fell in May of year ' + str(y + 1) + '?: '))
        jun = float(input('How many inches of rain fell in June of year ' + str(y + 1) + '?: '))
        jul = float(input('How many inches of rain fell in July of year ' + str(y + 1) + '?: '))
        aug = float(input('How many inches of rain fell in August of year ' + str(y + 1) + '?: '))
        sep = float(input('How many inches of rain fell in September of year ' + str(y + 1) + '?: '))
        oct = float(input('How many inches of rain fell in October of year ' + str(y + 1) + '?: '))
        nov = float(input('How many inches of rain fell in November of year ' + str(y + 1) + '?: '))
        dec = float(input('How many inches of rain fell in December of year ' + str(y + 1) + '?: '))

        rain_average_calc = (jan + feb + mar + apr + may + jun + jul + aug + sep + oct + nov + dec) / MONTHS
        total += jan + feb + mar + apr + may + jun + jul + aug + sep + oct + nov + dec

        num_months = MONTHS * years_of_rain

        average = total / num_months

        print('The total amount of rain was ' + format(total , ',.2f') + ' inches' )
        print('the average amount of rain was ' + format(rain_average_calc , ',.1f') + ' inches per month.' )
        print(average)
        print(num_months)

    break
except:
    print('invalid. try again')

Ответы [ 2 ]

3 голосов
/ 01 октября 2019

Объявите total перед входом в цикл for, чтобы он не сбрасывался при каждой итерации, добавляйте общее количество дождя для года y в total каждую итерацию, затем вычисляйте и распечатывайте результаты после выхода из цикла. Как то так:

# Outside of for loop
total = 0

for y in range(years_of_rain):
     # Inside of for loop

     # Code for getting input for current year goes here

     total += jan + feb + mar + apr + may + jun + jul + aug + sep + oct + nov + dec

# Outside of for loop, after it has finished

num_months = MONTHS * years_of_rain
average = total / num_months

print('The total amount of rain was ' + format(total , ',.2f') + ' inches' )
print('the average amount of rain was ' + format(average , ',.1f') + ' inches per month.' )
0 голосов
/ 01 октября 2019

Попробуйте использовать структуры данных, в этом случае я бы предложил создать список для хранения всех значений и создать его экземпляр перед циклом for. Тогда он все еще будет существовать после цикла for, и вы сможете выполнять свои вычисления.

...