在Python编程语言中,使用类来编写万年历是一种非常实用的方法,通过类,我们可以更好地封装万年历的相关属性和方法,使得代码更加模块化、易于维护,下面,我将详细介绍如何使用Python类来编写一个万年历。
我们需要分析万年历的基本功能,一个简单的万年历需要实现以下功能:根据年月日计算星期几、判断闰年、显示某月的日历等,我们将这些功能封装到一个名为Calendar的类中。
class Calendar:
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day
def is_leap_year(self, year):
"""判断是否为闰年"""
return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
def get_weekday(self, year, month, day):
"""计算星期几,返回0-6代表星期一到星期日"""
# Zeller公式计算星期几
if month == 1 or month == 2:
month += 12
year -= 1
k = year % 100
j = year // 100
h = day + 13 * (month + 1) // 5 + k + k // 4 + j // 4 + 5 * j
return h % 7
def show_month_calendar(self):
"""显示当前月的日历"""
# 获取当前月第一天是星期几
first_day = self.get_weekday(self.year, self.month, 1)
# 获取当前月的天数
days = [31, 29 if self.is_leap_year(self.year) else 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
month_days = days[self.month - 1]
# 打印日历头部
print("Sun Mon Tue Wed Thu Fri Sat")
print(" " * first_day, end="")
for day in range(1, month_days + 1):
print(f"{day:3}", end=" ")
if (first_day + day) % 7 == 0:
print() # 换行
print() # 打印完整个月后换行下面,我们来具体看看如何使用这个Calendar类。
1、创建一个Calendar对象:
calendar = Calendar(2022, 10, 1)
2、判断2022年是否为闰年:
print(calendar.is_leap_year(2022)) # 输出:False
3、计算2022年10月1日是星期几:
print(calendar.get_weekday(2022, 10, 1)) # 输出:4,代表星期五
4、显示2022年10月的日历:
calendar.show_month_calendar()
以下是输出结果:
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

