2016-08-12 1 views
0

Я пытаюсь решить проблему, но я работал над ней так долго и пробовал так много вещей, но я действительно новичок в python и не знаю, как получить входные данные I после.Калькулятор осадков Python

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

Главная беда у меня получает ввод сколько недель есть и дни недели, чтобы перебирать в программе, например:

Enter the amount of rain (in mm) for Friday of week 1: 5 
Enter the amount of rain (in mm) for Saturday of week 1: 6 
Enter the amount of rain (in mm) for Sunday of week 1: 7 
Enter the amount of rain (in mm) for Monday of week 2: 7 
Enter the amount of rain (in mm) for Tuesday of week 2: 6 

Это типа из вывода я хочу, но до сих пор я понятия не имею, как заставить его делать то, что я хочу. Я думаю, мне нужно использовать словарь, но я не уверен, как это сделать. Это мой код:

ALL_DAYS = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] 
total_rainfall = 0 
total_weeks = 0 
rainfall = {} 

# Get the number of weeks. 
while True: 
    try: 
     total_weeks = int(input("Enter the number of weeks for which rainfall should be calculated: ")) 
    except ValueError: 
     print("Number of weeks must be an integer.") 
     continue 

    if total_weeks < 1: 
     print("Number of weeks must be at least 1") 
     continue 
    else: 
     # age was successfully parsed and we're happy with its value. 
     # we're ready to exit the loop! 
     break 

for total_rainfall in range(total_weeks): 
    for mm in ALL_DAYS: 
     mm = int(input("Enter the amount of rain (in mm) for ", ALL_DAYS, "of week ", range(total_weeks), ": ")) 
     if mm != int(): 
      print("Amount of rain must be an integer") 
     elif mm < 0 : 
      print("Amount of rain must be non-negative") 

    # Calculate totals. 
    total_rainfall =+ mm 
    average_weekly = total_rainfall/total_weeks 
    average_daily = total_rainfall/(total_weeks*7) 
    # Display results. 
    print ("Total rainfall: ", total_rainfall, " mm ") 
    print("Average rainfall per week: ", average_weekly, " mm ") 
    print("Average rainfall per week: ", average_daily, " mm ") 

    if __name__=="__main__": 
     __main__() 

Если вы можете направить меня в правильном направлении, я буду так благодарен!

+1

Вы можете исправить свой отступ? – oldrinb

+0

Вы, вероятно, не должны указывать переменные цикла, которые вы обновляете позже ... Например. 'для total_rainfall в диапазоне (total_weeks):' ... Здесь вы перебираете номер недели, а не total_rainfall. Затем 'для mm в ALL_DAYS', вы зацикливаете дни, а не mm. –

+0

@oldrinb Это лучше? – remar311

ответ

0

Рекомендация: Разбейте проблему на более мелкие куски. Лучший способ сделать это - с помощью отдельных функций.

Например, получить количество

def get_weeks(): 
    total_weeks = 0 
    while True: 
     try: 
      total_weeks = int(input("Enter the number of weeks for which rainfall should be calculated: ")) 
      if total_weeks < 1: 
       print("Number of weeks must be at least 1") 
      else: 
       break 
     except ValueError: 
      print("Number of weeks must be an integer.") 

    return total_weeks 

недель Затем, получая вход мм для определенного номера недели и дня. (Здесь есть ваш ожидаемый выход)

def get_mm(week_num, day): 
    mm = 0 
    while True: 
     try: 
      mm = int(input("Enter the amount of rain (in mm) for {0} of week {1}: ".format(day, week_num))) 
      if mm < 0: 
       print("Amount of rain must be non-negative") 
      else: 
       break 
     except ValueError: 
      print("Amount of rain must be an integer") 

    return mm 

Две функции для расчета среднего. Сначала для списка, второй для списка списков.

# Accepts one week of rainfall 
def avg_weekly_rainfall(weekly_rainfall): 
    if len(weekly_rainfall) == 0: 
     return 0 
    return sum(weekly_rainfall)/len(weekly_rainfall) 

# Accepts several weeks of rainfall: [[1, 2, 3], [4, 5, 6], ...]  
def avg_total_rainfall(weeks): 
    avgs = [ avg_weekly_rainfall(w) for w in weeks ] 
    return avg_weekly_rainfall(avgs) 

Используя эти технологии, вы можете построить свои недели осадков в свой список.

# Build several weeks of rainfall 
def get_weekly_rainfall(): 
    total_weeks = get_weeks() 
    total_rainfall = [] 

    for week_num in range(total_weeks): 
     weekly_rainfall = [0]*7 
     total_rainfall.append(weekly_rainfall) 

     for i, day in enumerate(ALL_DAYS): 
      weekly_rainfall[i] += get_mm(week_num+1, day) 

    return total_rainfall 

Затем вы можете написать функцию, которая принимает этот «главный список», и выводит некоторые результаты.

# Print the output of weeks of rainfall 
def print_results(total_rainfall): 
    total_weeks = len(total_rainfall) 
    print("Weeks of rainfall", total_rainfall) 

    for week_num in range(total_weeks): 
     avg = avg_weekly_rainfall(total_rainfall[week_num]) 
     print("Average rainfall for week {0}: {1}".format(week_num+1, avg)) 

    print("Total average rainfall:", avg_total_rainfall(total_rainfall)) 

И, наконец, всего две строки для запуска полного скрипта.

weekly_rainfall = get_weekly_rainfall() 
print_results(weekly_rainfall) 
+0

Спасибо, это помогло сломать код, вместо того чтобы пытаться думать обо всем сразу. – remar311

0

Я использую список, чтобы хранить среднюю зарплату за каждую неделю. и мой цикл:

1.While петля ---> неделя (с помощью я сосчитать)

2.in во время цикла: инициализация week_sum = 0, а затем использовать для цикла задать количество осадков 7 дней ,

3.Выход для цикла, средний уровень осадков и добавление к списку недельных платежей.

4.Add week_sum к общему осадков, и я + = 1 на следующей неделе

weekaverage=[] 
i = 0 #use to count week 

while i<total_weeks: 
    week_sum = 0. 
    print "---------------------------------------------------------------------" 
    for x in ALL_DAYS: 
     string = "Enter the amount of rain (in mm) for %s of week #%i : " %(x,i+1) 
     mm = float(input(string)) 
     week_sum += mm 
    weekaverage.append(weeksum/7.) 
    total_rainfall+=week_sum 
    print "---------------------------------------------------------------------" 
    i+=1 

print "Total rainfall: %.3f" %(total_rainfall) 
print "Day average is %.3f mm" %(total_rainfall/total_weeks/7.) 

a = 0 

for x in weekaverage: 
    print "Average for week %s is %.3f mm" %(a,x) 
    a+=1