2016-04-07 1 views
0

Мне нужно написать программу, которая рассчитывает, что пользователи платят. Часть, на которой я застрял, - это то, где я должен просить количество часов работы пользователя за каждый день недели (что повторяется в зависимости от того, сколько недель они указали). Это то, что я до сих пор:Python: вложенные циклы не ведут себя так, как я хочу их

daysofweek = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 

day = 0 
while day < weeks: #user specified variable above 0 
    for i in range(len(daysofweek)): 
    while True: 
     daysofweek[i] = input("Enter the number of hours for week 1 " + daysofweek[i] + ": ") 
     try: 
     hours = float(daysofweek[i]) 
     if hours < 0 or hours > 24: 
      print("Invalid: Enter a number between 0 and 24") 
      continue 
     break 
     except ValueError: 
     print("Invalid: Enter a number between 0 and 24") 
day = day + 1 

Извините за стеной кода (некоторые из них, вероятно, не имеет отношения к моей проблеме). Таким образом, в основном это повторяется через список в первую неделю, но затем имена дней заменяются введенными числами. Плюс я не уверен, как хранить эти переменные, которые были введены, поэтому я могу рассчитать вознаграждение после этого. Извините, если это слишком много, просто полностью застрял. Благодаря!

+0

", но затем имена дней заменяются введенными цифрами" - Да, это происходит, когда вы переназначаете элементы. Почему, что вы хотели бы сделать с введенными значениями? – TigerhawkT3

+0

Да, я знаю, почему это происходит, но понятия не имею, как изменить его. Мне нужно добавить их и умножить на другой вход. – DanThistle

+0

Да, это то, что вы сказали Python. 'daysofweek [i] = input ('x')' ** заменяет значения ** в 'daysofweek'. Что вы намеревались сделать? –

ответ

2

Вы можете использовать Dict, ассоциировать день и количество часов:

daysofweek = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] 
hours = {} 
for day in daysofweek: 
    hour = -1 
    while hour < 0 or hour > 24: 
     hour = input("Enter the number of hours for week 1 " + day + ": ") 
    hours[day] = hour 

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

from collections import defaultdict 
payperday = defaultdict(lambda: 10, {'Sunday': 20}) 
print(sum(payperday[day] * hours[day] for day in daysofweek)) 

Добавление недель может быть выполнено путем добавления целого числа в словарный ключ и петли:

for week in range(nb_week): 
    for day in daysofweek: 
     hour = -1 
     while hour < 0 or hour > 24: 
      hour = input("Enter the number of hours for week " +str(week) + " " + day + ": ") 
     hours[week, day] = hour 

Тогда вы можете задать по количеству часов работал на определенной неделе & день:

hours[2, 'Sunday'] 

Обратите внимание, что некоторые более idiomatic code достаточно, чтобы получить простой код: использование for day in daysofweek вместо C- стиль for i in range(len(daysofweek)) или использование словаря для объединения данных, например.

+0

У меня есть это сейчас: 'daysofweek = [" Monday "," Tuesday "," Wednesday "," Thursday "," Friday "," Saturday "," Sunday "]' 'hours = {}' ' в то время как день <неделя: ' ' для дня в daysofweek: ' ' hour = -1' 'while hour < 0 or hour > 24:' 'hour = input (" Введите количество часов на неделю 1 "+ день +": ")' 'hours [day] = hour' ' day = day + 1' Но он проходит через дни недели бесконечно независимо от значения 'week' – DanThistle

+0

Вам нужно увеличить' week'. Кроме того, «день <неделя» кажется нечувствительным. – aluriak