3 回答
TA贡献1895条经验 获得超7个赞
您使用了嵌套的 for 循环,因此对于每一天 - 每个名称都与当天一起打印。仅使用外循环,并计算轮到谁。应该是这样的:
for day in range(1, days): print('%s %s : %s' % (month, day, dish_list[day % len(dish_list)]))
假设你的室友和你平分菜品。
TA贡献1829条经验 获得超9个赞
您可以一起循环遍历两个列表,并使用以下命令重复较短的列表itertools.cycle:
import itertools
for day, person in zip(range(1, days), itertools.cycle(dish_list)):
print('{} {} : {}'.format(month, day, person))
更新:
zip将两个可迭代range对象中的元素配对——天的对象和——从两个可迭代对象dish_list创建一个新的元组对列表。但是,zip只创建一个直到最短可迭代的列表。itertools.cycle绕过了这个问题,所以zip循环回到 through dish_list。for 循环现在将一起循环遍历这两个循环,而不是在原始代码中以嵌套方式循环。
文档可能会比我刚刚解释的更好:zip,itertools.cycle
TA贡献2036条经验 获得超8个赞
问题是您要遍历几天,然后遍历名称列表。想象一下逐行运行,因为 for 循环仅在到达项目末尾后才会重复。所以你在你的函数中说过,每个人每天都要洗碗,这就是为什么你有这么多重复。
更容易的是只有一个 for 循环,并在该循环内将 1 添加到 day 和dish_list
person = 0 # this will serve as the index of the list
for day in range(days):
print("%s %s : %s" % (month, day + 1, dish_list[person]))
if person == 3:
person = 0
else:
person += 1
还要指出的是,在定义函数之后应该有一个缩进,否则会抛出错误。希望这可以帮助
添加回答
举报