对下面万年历代码用面向对象编程设计进行改写(不使用calendar库)
MonthDays_year = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
MonthDays_leapy = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
twelfthMonth = [1, 3, 5, 7, 8, 10, 12]
weeklist = {0: 'Monday', 1: 'Tuesday', 2: 'Wednesday', 3: 'Thursday', 4: 'Frindy', 5: 'Saturday', 6: 'Sunday'}
def leapyear(year):
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
l = 1
else:
l = 0
return l
def yeardays(year):
day1 = 0
if year >= 1900:
for i in range(1900, year):
if leapyear(i) == 1:
day1 += 366
else:
day1 += 365
else:
for i in range(year, 1900):
if leapyear(i) == 1:
day1 += 366
else:
day1 += 365
return day1
def monthdays(year, month):
day2 = 0
if leapyear(year) == 1:
for i in range(0, month):
day2 = day2 + MonthDays_leapy[i]
else:
for i in range(0, month):
day2 = day2 + MonthDays_year[i]
return day2
def monthdays1(year, month):
day2 = 0
if leapyear(year) == 1:
for i in range(0, month - 1):
day2 = day2 + MonthDays_leapy[i]
else:
for i in range(0, month - 1):
day2 = day2 + MonthDays_year[i]
return day2
def thisMonthDays(year, month):
if month in twelfthMonth:
return 31
elif leapyear(year) == 1 and month == 2:
return 29
elif leapyear(year) == 0 and month == 2:
return 28
else:
return 30
def CaculateWeekDay(year, month, days):
m = 0
yeardays(year)
monthdays(year, month)
m = yeardays(year) + monthdays1(year, month) + days - 1
print('输入日期为:', weeklist[m % 7])
def printTitle(year, month):
print("-" * 36, "%s年%d月" % (year, month), "-" * 36)
s = ("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六")
for i in s:
print("%-10s" % i, end="")
print()
def week(year, month):
thisDay = 0
yDays = yeardays(year)
mDays = monthdays1(year, month)
if year >= 1900:
sumDays = yDays + mDays
thisDay = (sumDays % 7) + 1
else:
sumDays = yDays - mDays
thisDay = 7 - (sumDays % 7)
return thisDay
def Calendarmonth(year, month):
printTitle(year, month)
day1 = week(year, month)
day2 = thisMonthDays(year, month)
if day1 != 7:
for i in range(1, day1 + 1):
s = " "
print("%-13s" % s, end="")
for j in range(day1 + 1, day1 + day2 + 1):
if j % 7 == 0:
print("%-13d" % (j - day1))
else:
print("%-13d" % (j - day1), end="")
def Calendaryear(year):
for i in range(1, 13):
Calendarmonth(year, i)
print()
def Calendar():
year = int(input('请输入要查询的年份:'))
month = int(input('请输入要查询的月份,若仅查年请输入0:'))
days = int(input('请输入要查询的日期,若仅查月历或年历输入0:'))
if year != 0 and month != 0 and days != 0:
CaculateWeekDay(year, month, days)
elif year != 0 and month != 0 and days == 0:
Calendarmonth(year, month)
else:
Calendaryear(year)
Calendar()