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

用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 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题