Python - 遍历月份日期并打印自定义输出

我目前不确定用于以下问题的逻辑以及编程的新手。(目前正在学习 python)

尝试遍历给定月份的每个日期 - 比如 05/01 - 05/31 并以下面的格式打印出来。

http://img2.mukewang.com/63a175ca000189c102240236.jpg

周一到周五的日期要单独打印。星期六和星期日的日期要单独打印。

如果这个月从星期五开始 - 05/01/2020,输出应该是 那个星期的最后一个工作日。

对于 2020 年 4 月,产量将如下所示,因为 4 月的第一周从周三开始。

我设法想出以下尝试,但不确定如何进一步进行。


import sys

from datetime import date, datetime, timedelta


year = int(sys.argv[1])

month = int(sys.argv[2])

st_dt = int(sys.argv[3])

en_dt = int(sys.argv[4])


first_date = datetime(year, month, st_dt).date()

get_first_day = datetime(year, month, st_dt).isoweekday()


def daterange(startDate, endDate, delta=timedelta(days=1)):

    currentDate = startDate

    while currentDate <= endDate:

        yield currentDate

        currentDate += delta


for date in daterange(date(year, month, st_dt), date(year, month, en_dt), delta=timedelta(days=1)):

     print(date)



  date.py 2020 5 1 31 # script

提出了一个独立的“if 循环”,正如我之前所说,不确定如何构建更大的图景:(


if get_first_day == 1:

        #print("Monday")

        sec_d =  first_date + timedelta(days=4)

elif get_first_day == 2:

        sec_d = first_date + timedelta(days=3)

elif get_first_day == 3:

        sec_d = first_date + timedelta(days=2)

elif get_first_day == 4:

        sec_d = first_date + timedelta(days=2)

elif get_first_day == 5:

        sec_d = first_date

        #print("Friday")

else:

        pass


print(f"Second date:{sec_d} ") -- which gave  -- > Second date:2020-05-01


明月笑刀无情
浏览 203回答 1
1回答

慕妹3146593

您可以将日期保存在字典中,字典键是日历周和日期类型(周末、星期几)的元组。每一天都保存在allDays字典中,按周数和日期类型的组合作为键进行分组:&nbsp;('18', 'weekend'): [datetime.date(2020, 5, 2), datetime.date(2020, 5, 3)],&nbsp;('18', 'working'): [datetime.date(2020, 5, 1)],&nbsp;('19', 'weekend'): [datetime.date(2020, 5, 9), datetime.date(2020, 5, 10)],&nbsp;('19', 'working'): [datetime.date(2020, 5, 4), ...所以你只需要取出每个 dict 项目的第一个和最后一个项目:import sysfrom datetime import date, datetime, timedeltayear, month, st_dt, en_dt = 2020, 5, 1, 31first_date = datetime(year, month, st_dt).date()get_first_day = datetime(year, month, st_dt).isoweekday()def daterange(startDate, endDate, delta=timedelta(days=1)):&nbsp; &nbsp; currentDate = startDate&nbsp; &nbsp; while currentDate <= endDate:&nbsp; &nbsp; &nbsp; &nbsp; yield currentDate&nbsp; &nbsp; &nbsp; &nbsp; currentDate += deltaallDays = {}_lastDayType = Nonefor dte in daterange(date(year, month, st_dt), date(year, month, en_dt), delta=timedelta(days=1)):&nbsp; &nbsp; if 0 <= dte.weekday() < 5:&nbsp; &nbsp; &nbsp; &nbsp; _dayType = 'working'&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; _dayType = 'weekend'&nbsp; &nbsp; _weeknum = dte.strftime("%V")&nbsp; # number of calendar week&nbsp; &nbsp; _key = (_weeknum, _dayType)&nbsp; &nbsp; if _key not in allDays:&nbsp; &nbsp; &nbsp; &nbsp; # create an empty list if unique key doesnt exist&nbsp; &nbsp; &nbsp; &nbsp; allDays[_key] = []&nbsp; &nbsp; allDays[_key].append(dte)&nbsp; &nbsp; &nbsp; # add the dates ...for k,v in allDays.items():&nbsp; &nbsp; if len(v) == 1:&nbsp; &nbsp; &nbsp; &nbsp; first, last = v[0], v[0]&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; first, last = v[0], v[-1]&nbsp; &nbsp; print("%s >> %s" % (first, last))输出:2020-05-01 >> 2020-05-012020-05-02 >> 2020-05-032020-05-04 >> 2020-05-082020-05-09 >> 2020-05-102020-05-11 >> 2020-05-152020-05-16 >> 2020-05-172020-05-18 >> 2020-05-222020-05-23 >> 2020-05-242020-05-25 >> 2020-05-292020-05-30 >> 2020-05-31
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python