Python:嵌套循环没有按我希望的方式运行

Python: nested loops not behaving how I want them to

我需要编写一个程序来计算用户支付的费用。我坚持的部分是我必须询问用户一周中每天工作的小时数(根据他们指定的周数重复)。这是我目前所拥有的:

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

抱歉代码墙(其中一些可能与我的问题无关)。所以基本上这会在第一周很好地遍历列表,但随后日期名称将替换为输入的数字。另外,我不确定如何存储输入的这些变量,以便之后计算工资。对不起,如果这要求太多,完全卡住了。谢谢!

你可以使用字典,关联日期和小时数:

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)),或使用字典来关联数据,例如实例。