美文网首页Python爬虫作业
python青苔计划(六)打印万年历

python青苔计划(六)打印万年历

作者: 请万万喝水 | 来源:发表于2017-04-23 21:39 被阅读0次
    青苔计划

    /(ㄒoㄒ)/~~

    我这样的小白

    万年历打完,感觉身体被掏空

    请给我暖暖的拥抱 ╮(╯╰)╭

    ----------正经的分割线----------

    任务要求

    刚看到要打印万年历,我彻底懵逼了,从何打起?怎么打!特别是把农历和阳历搞混了,被农历中的闰月的概念折磨的死去活来,一番折磨后彭老师在学习群中再次强调要分拆目标(PS:分拆真的是一种能力)

    目标分拆

    • 判断year是否为闰年(关系到2月的天数)
    • 判断month每个月的天数
      分为31天,30天,29天,28天四中(用于计算每年的总天数)
    • 判断每月1日对应的星期几(根据参考日期:1990年1月1日是星期一,计算某年某月万年历开始打印的位置)

    1.判断是否为闰年

    #判读是否为闰年
    def yes_or_not_leap_year(year): #定义函数
        if year%4==0 and year%100!=0 or year%400==0:
            return True #返回值供计算2月天数使用
        else:
            return False
    

    2.判断每个月的天数

    #判断每个月的天数,并返回对应月的天数,供计算输入日期与1990年1月1日的天数差
    def days_of_the_month(year,month):
        if month in [1,3,5,7,8,10,12]:
            return 31
        elif month in [4,6,9,11]:
            return 30
        elif yes_or_not_leap_year(year):#根据是否为闰年,返回2月对应的天数
            return 29
        else:
            return 28
    

    3.计算查询的日期距离1990年1月1日相差多少天

    #计算查询的日期距离1990年1月1日相差多少天
    def days_between_to_19900101(year,month):
        sum_days=0
        for y in range(1990,year):#计算相差年份对应的天数
            if yes_or_not_leap_year(year):
                sum_days=sum_days+366
            else:
                sum_days=sum_days+365
        for m in range(1,month):将本年至查询日期的天数计入
            sum_days=sum_days+days_of_the_month(year,month)
        return sum_days
    

    4.计算查询月1号对应的是星期几

    #判断一个月的第一天是星期几,以1990年1月1日为时间参考
    def the_firstday_of_month(year,month):
        return 1+days_between_to_19900101(year,month)%7
    

    5.打印万年历QAQ~

    def print_wannianli(year,month):
        print(year," ",month)
        print("   "'星期一'"     " '星期二'"     "'星期三'"     "'星期四'"     "'星期五'"     "'星期六'"     "'星期日')
        i=the_firstday_of_month(year,month)
        print(('     A     '*(i-1)),end="")
        for p in range(1,days_of_the_month(year,month)+1):
            if i%7!=0:
                if len(str(p))==1:
                    print('     ',end="")
                    print(p,end='')
                    print('     ',end="")
                else:
                    print('    ', end="")
                    print(p, end='')
                    print('     ', end="")
            else:
                print('     ',end="")
                print(p)
            i=i+1
    

    6函数调用

    year=int(input("请输入要查询的年份"))
    month=int(input("请输入要查询的月份"))
    print_wannianli(year,month)
    

    泪和汗

    • 提前学些函数构建和调用,没时间写出来啦
    • 打印时文字间的距离全部用空格调整,调了好久,因为日期存在len(month)=1的,还有len(month)=2的,所以导致错位,最终引起蝴蝶效应放大了错位
    第一次尝试

    经彭老师提醒后,加入日期的判断,终于可以了,日期中关键的几个空格我用了“A”代替,为了只管看到输出,其实可以删去

    修正后

    完整代码:打印万年历

    #打印万年历
    #1.判断是否为闰年
    #2.计算每种情况下,每个月份的天数
    #3.由2计算每年的天数
    #4.计算每月一日对应的星期,基于1990年1月1日是星期一
    
    
    #判读是否为闰年
    def yes_or_not_leap_year(year):
        if year%4==0 and year%100!=0 or year%400==0:
            return True
        else:
            return False
    
    #判断每个月的天数
    def days_of_the_month(year,month):
        if month in [1,3,5,7,8,10,12]:
            return 31
        elif month in [4,6,9,11]:
            return 30
        elif yes_or_not_leap_year(year):
            return 29
        else:
            return 28
    
    #计算查询的日期距离1990年1月1日相差多少天
    def days_between_to_19900101(year,month):
        sum_days=0
        for y in range(1990,year):
            if yes_or_not_leap_year(year):
                sum_days=sum_days+366
            else:
                sum_days=sum_days+365
        for m in range(1,month):
            sum_days=sum_days+days_of_the_month(year,month)
        return sum_days
    
    #判断一个月的第一天是星期几
    def the_firstday_of_month(year,month):
        return 1+days_between_to_19900101(year,month)%7
    #打印日历
    def print_wannianli(year,month):
        print(year," ",month)
        print("   "'星期一'"     " '星期二'"     "'星期三'"     "'星期四'"     "'星期五'"     "'星期六'"     "'星期日')
        i=the_firstday_of_month(year,month)
        print(('     A     '*(i-1)),end="")
        for p in range(1,days_of_the_month(year,month)+1):
            if i%7!=0:
                if len(str(p))==1:
                    print('     ',end="")
                    print(p,end='')
                    print('     ',end="")
                else:
                    print('    ', end="")
                    print(p, end='')
                    print('     ', end="")
            else:
                print('     ',end="")
                print(p)
            i=i+1
    
    #输入及启动程序
    year=int(input("请输入要查询的年份"))
    month=int(input("请输入要查询的月份"))
    print_wannianli(year,month)
    

    第一周打卡成功

    青苔计划一周记

    相关文章

      网友评论

        本文标题:python青苔计划(六)打印万年历

        本文链接:https://www.haomeiwen.com/subject/wegyzttx.html