请为如下万年历程序进行自顶向下设计,画出模块图,并实现之。
它的功能是:用户输入某年、某月、某日,程序输出这一天是星期几;
用户输入某年、某月,程序输出该年该月的每一天是星期几;用户输入某年,
程序输出该年每一月的每一天是星期几。该程序的求解方案是:
为给定的年、月、日计算它距离1900年1月1日(星期一)的天数,从而得出是星期几(注意要考虑间隔年为闰年的情况)。
用python实现万年历,输入年份输出12个月的月历,输入年、月则输出该月月历,输入年月日则输出该天为星期几
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 小帆爱学习 2021-11-07 23:34关注
思路·
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()
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥15 找一个QT页面+目标识别(行人检测)的开源项目
- ¥15 有没有整苹果智能分拣线上图像数据
- ¥20 有没有人会这个东西的
- ¥15 cfx考虑调整“enforce system memory limit”参数的设置
- ¥30 航迹分离,航迹增强,误差分析
- ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
- ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
- ¥15 LLM accuracy检测
- ¥15 pycharm添加远程解释器报错
- ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口