万年历 1)输入年份,判断是否为闰年; 2)输入年月日,判断该日为星期几; 3)输入年份,打出12个月的日历; 4)输入月份,打出该月的日历; 5)要求用多个函数实现。
时间: 2023-11-28 20:47:26 浏览: 204
wannianli.rar_当前时间
好的,我可以帮你完成这个万年历程序。我们可以分别实现不同的函数来实现每个功能。
首先,我们来实现判断是否为闰年的函数:
```python
def is_leap(year):
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
return True
else:
return False
```
接下来,我们来实现判断某一天是星期几的函数。这里我们使用 Zeller's congruence 算法来实现:
```python
def day_of_week(year, month, day):
if month < 3:
month += 12
year -= 1
century = year // 100
year_of_century = year % 100
w = (century // 4 - 2 * century + year_of_century + year_of_century // 4 + 13 * (month + 1) // 5 + day - 1) % 7
return w
```
然后,我们来实现打印某一年所有月份日历的函数:
```python
def print_year_calendar(year):
for month in range(1, 13):
print_month_calendar(year, month)
print('\n')
```
接下来,我们来实现打印某一个月日历的函数:
```python
def print_month_calendar(year, month):
# 计算当月第一天是星期几
w = day_of_week(year, month, 1)
# 计算当月天数
if month == 2:
if is_leap(year):
days = 29
else:
days = 28
elif month in [4, 6, 9, 11]:
days = 30
else:
days = 31
# 打印日历表头
print('{:^20}'.format(f'{year}年{month}月'))
print('日 一 二 三 四 五 六')
# 打印日历内容
for i in range(w):
print(' ', end='')
for day in range(1, days + 1):
print(f'{day:2d} ', end='')
w += 1
if w == 7:
print()
w = 0
print()
```
最后,我们将上面的函数整合起来,实现一个完整的万年历:
```python
def is_leap(year):
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
return True
else:
return False
def day_of_week(year, month, day):
if month < 3:
month += 12
year -= 1
century = year // 100
year_of_century = year % 100
w = (century // 4 - 2 * century + year_of_century + year_of_century // 4 + 13 * (month + 1) // 5 + day - 1) % 7
return w
def print_year_calendar(year):
for month in range(1, 13):
print_month_calendar(year, month)
print('\n')
def print_month_calendar(year, month):
# 计算当月第一天是星期几
w = day_of_week(year, month, 1)
# 计算当月天数
if month == 2:
if is_leap(year):
days = 29
else:
days = 28
elif month in [4, 6, 9, 11]:
days = 30
else:
days = 31
# 打印日历表头
print('{:^20}'.format(f'{year}年{month}月'))
print('日 一 二 三 四 五 六')
# 打印日历内容
for i in range(w):
print(' ', end='')
for day in range(1, days + 1):
print(f'{day:2d} ', end='')
w += 1
if w == 7:
print()
w = 0
print()
# 主函数
if __name__ == '__main__':
mode = input('请选择模式:1.判断闰年 2.判断星期几 3.打印全年日历 4.打印某月日历\n')
if mode == '1':
year = int(input('请输入年份:'))
if is_leap(year):
print(f'{year}年是闰年')
else:
print(f'{year}年不是闰年')
elif mode == '2':
year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
day = int(input('请输入日期:'))
w = day_of_week(year, month, day)
week_days = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
print(f'{year}年{month}月{day}日是{week_days[w]}')
elif mode == '3':
year = int(input('请输入年份:'))
print_year_calendar(year)
elif mode == '4':
year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
print_month_calendar(year, month)
```
阅读全文