小帆爱学习 2021-11-07 23:33 采纳率: 50%
浏览 599
已结题

用python实现万年历,输入年份输出12个月的月历,输入年、月则输出该月月历,输入年月日则输出该天为星期几

请为如下万年历程序进行自顶向下设计,画出模块图,并实现之。
它的功能是:用户输入某年、某月、某日,程序输出这一天是星期几;
用户输入某年、某月,程序输出该年该月的每一天是星期几;用户输入某年,
程序输出该年每一月的每一天是星期几。该程序的求解方案是:
为给定的年、月、日计算它距离1900年1月1日(星期一)的天数,从而得出是星期几(注意要考虑间隔年为闰年的情况)。

  • 写回答

1条回答 默认 最新

  • 小帆爱学习 2021-11-07 23:34
    关注

    思路·

    img

    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()
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月15日
  • 已采纳回答 11月7日
  • 创建了问题 11月7日

悬赏问题

  • ¥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 如何让子窗口鼠标滚动独立,不要传递消息给主窗口