为了账号安全,请及时绑定邮箱和手机立即绑定

使用函数打印带有人名和日期的月份列表

使用函数打印带有人名和日期的月份列表

慕姐8265434 2021-09-28 15:36:59
我正在学习用 python 编写代码,并认为将我通常为室友做的任务自动化会很酷。我把每个月的名字和日期写出来,这样每个人都知道轮到谁来洗碗了。这是我的代码:def dish_day_cycle(month, days):    print('Dish Cycle For %s:' % month)    dish_list = ['Jen', 'Zack', 'Hector', 'Arron']    days = days + 1    for day in range(1, days):        for i in dish_list:            print('%s %s : %s' % (month, day, i))问题是它每天都重复每个人的名字,显然不是我想要的。我需要它每天只打印一个名字。不是这个:>>> dish_day_cycle(month, days)Dish Cycle For December:December 1 : JenDecember 1 : ZackDecember 1 : HectorDecember 1 : ArronDecember 2 : JenDecember 2 : ZackDecember 2 : HectorDecember 2 : ArronDecember 3 : JenDecember 3 : ZackDecember 3 : HectorDecember 3 : ArronDecember 4 : JenDecember 4 : ZackDecember 4 : HectorDecember 4 : ArronDecember 5 : JenDecember 5 : ZackDecember 5 : HectorDecember 5 : Arron请让我知道如何更正此功能以使其正常工作。
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您使用了嵌套的 for 循环,因此对于每一天 - 每个名称都与当天一起打印。仅使用外循环,并计算轮到谁。应该是这样的:

for day in range(1, days):
    print('%s %s : %s' % (month, day, dish_list[day % len(dish_list)]))

假设你的室友和你平分菜品。


查看完整回答
反对 回复 2021-09-28
?
PIPIONE

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


查看完整回答
反对 回复 2021-09-28
?
慕桂英3389331

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

还要指出的是,在定义函数之后应该有一个缩进,否则会抛出错误。希望这可以帮助


查看完整回答
反对 回复 2021-09-28
  • 3 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信