实现某年某月的月历输出,月历每行从周一开始,每个日期按固定3位宽度右对齐的格式显示。计算该月的天数,然后按格式输出, days = calc_days_with_month(y, m) # 找到这个月有多少天 for day in range(1, days + 1): # 计算该日期是星期几 # 1.如果是1号,输出首行若干空格 # 2.按宽度为3右对齐输出每天的日期 # 3.如果当前日期为星期天,或者是该月的最后一天,换行 用python写
时间: 2024-02-25 10:59:50 浏览: 135
c#实现输出本月的月历
下面是实现某年某月的月历输出的代码:
```python
import datetime
def calc_days_with_month(year, month):
"""计算指定年月有多少天"""
if month == 12:
return (datetime.date(year + 1, 1, 1) - datetime.date(year, month, 1)).days
else:
return (datetime.date(year, month + 1, 1) - datetime.date(year, month, 1)).days
def print_calendar(year, month):
"""输出指定年月的月历"""
days = calc_days_with_month(year, month) # 这个月有多少天
first_day_weekday = datetime.date(year, month, 1).weekday() + 1 # 这个月1号是星期几(星期一为1,星期天为7)
print(" Mo Tu We Th Fr Sa Su")
for day in range(1, days + 1):
# 计算该日期是星期几
current_weekday = datetime.date(year, month, day).weekday() + 1
if day == 1:
# 如果是1号,输出首行若干空格
print(" " * (current_weekday - 1), end="")
# 按宽度为3右对齐输出每天的日期
print("{0:>{1}}".format(day, 3), end="")
if current_weekday == 7 or day == days:
# 如果当前日期为星期天,或者是该月的最后一天,换行
print()
else:
print(" ", end="")
# 测试一下
print_calendar(2022, 5)
```
代码的思路是先使用 `datetime` 模块计算出指定年月有多少天和这个月1号是星期几,然后按照题目要求输出每一天的日期。其中,`weekday()` 方法可以返回指定日期是星期几,星期一为1,星期天为7。在输出每一天的日期时,使用 `{0:>{1}}` 格式化字符串将日期右对齐,宽度为3。
阅读全文