用python实现万年历,输入年份输出12个月的月历,输入年、月则输出该月月历,输入年月日则输出该天为星期几
问题描述:
请为如下万年历程序进行自顶向下设计,画出模块图,并实现之。
它的功能是:用户输入某年、某月、某日,程序输出这一天是星期几;
用户输入某年、某月,程序输出该年该月的每一天是星期几;用户输入某年,
程序输出该年每一月的每一天是星期几。该程序的求解方案是:
为给定的年、月、日计算它距离1900年1月1日(星期一)的天数,从而得出是星期几(注意要考虑间隔年为闰年的情况)。
答
思路·
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]#为腊月的月份
week={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
#计算据输入年份第一天 到 标的日1900年1月1日前的总天数
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
#函数CaculateWeekDay(year,month,days),当用户输入的时年月日类型的数据时,输出该天是星期几
def CaculateWeekDay(year,month,days):
m=0
yeardays(year)
monthdays(year,month)
m=yeardays(year)+monthdays1(year,month)+days-1
print('输入日期为:',week[(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
#当用户输入数据为某年某月时,利用Calendarmonth(year,month)
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()