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

我正在学习用 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 : Jen

December 1 : Zack

December 1 : Hector

December 1 : Arron

December 2 : Jen

December 2 : Zack

December 2 : Hector

December 2 : Arron

December 3 : Jen

December 3 : Zack

December 3 : Hector

December 3 : Arron

December 4 : Jen

December 4 : Zack

December 4 : Hector

December 4 : Arron

December 5 : Jen

December 5 : Zack

December 5 : Hector

December 5 : Arron

请让我知道如何更正此功能以使其正常工作。


慕姐8265434
浏览 194回答 3
3回答

人到中年有点甜

您使用了嵌套的 for 循环,因此对于每一天 - 每个名称都与当天一起打印。仅使用外循环,并计算轮到谁。应该是这样的:for day in range(1, days):     print('%s %s : %s' % (month, day, dish_list[day % len(dish_list)]))假设你的室友和你平分菜品。

PIPIONE

您可以一起循环遍历两个列表,并使用以下命令重复较短的列表itertools.cycle:import itertoolsfor 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

慕桂英3389331

问题是您要遍历几天,然后遍历名称列表。想象一下逐行运行,因为 for 循环仅在到达项目末尾后才会重复。所以你在你的函数中说过,每个人每天都要洗碗,这就是为什么你有这么多重复。更容易的是只有一个 for 循环,并在该循环内将 1 添加到 day 和dish_listperson = 0 # this will serve as the index of the listfor day in range(days):    print("%s %s : %s" % (month, day + 1, dish_list[person]))    if person == 3:        person = 0    else:        person += 1还要指出的是,在定义函数之后应该有一个缩进,否则会抛出错误。希望这可以帮助
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python