设计万年历,并按照月份输出。
时间: 2024-03-02 13:53:50 浏览: 17
好的,我可以为您设计一个简单的万年历。下面是一种可能的实现方案:
```python
# 计算某一年的天数
def get_days_in_year(year):
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
return 366
else:
return 365
# 计算某一月的天数
def get_days_in_month(year, month):
if month in [1, 3, 5, 7, 8, 10, 12]:
return 31
elif month in [4, 6, 9, 11]:
return 30
elif month == 2:
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
return 29
else:
return 28
# 计算某一天是星期几
def get_weekday(year, month, day):
days = 0
for y in range(1900, year):
days += get_days_in_year(y)
for m in range(1, month):
days += get_days_in_month(year, m)
days += day - 1
return (days + 1) % 7 # 1900年1月1日是星期一,所以要加1
# 输出某一月份的日历
def print_calendar(year, month):
# 输出表头
print(f"{year}年{month}月".center(20))
print("日 一 二 三 四 五 六")
# 计算该月第一天是星期几
weekday = get_weekday(year, month, 1)
# 输出第一行
print(" " * weekday, end="")
for d in range(1, 8 - weekday):
print(f"{d:2d} ", end="")
print()
# 输出后面几行
for w in range(2, 7):
for d in range((w - 1) * 7 - weekday + 1, w * 7 - weekday + 1):
if d <= get_days_in_month(year, month):
print(f"{d:2d} ", end="")
else:
print(" ", end="")
print()
if d == get_days_in_month(year, month):
break
print()
# 输出整个万年历
with open("calendar.txt", "w") as f:
for year in range(1900, 2100):
for month in range(1, 13):
print_calendar(year, month)
# 将输出结果写入文件
f.write(f"{year}年{month}月\n")
f.write("日 一 二 三 四 五 六\n")
weekday = get_weekday(year, month, 1)
for w in range(1, 7):
for d in range((w - 1) * 7 - weekday + 1, w * 7 - weekday + 1):
if d <= get_days_in_month(year, month):
f.write(f"{d:2d} ")
else:
f.write(" ")
f.write("\n")
if d == get_days_in_month(year, month):
break
f.write("\n")
```
这个实现方案中,我们首先定义了 `get_days_in_year()`、`get_days_in_month()` 和 `get_weekday()` 三个函数,分别用于计算某一年的天数、某一月的天数和某一天是星期几。然后,我们定义了 `print_calendar()` 函数,用于输出某一月份的日历。最后,我们在主函数中循环遍历每一个月份,并调用 `print_calendar()` 函数来输出日历,并将输出结果保存至一个文本文件中。
需要注意的是,为了输出的对齐,我们在输出日历的时候使用了字符串格式化来确保每个数字占据两个字符的位置。如果您在使用过程中遇到了问题,可以根据实际情况进行调整和优化。