美文网首页Python爬虫作业
完全数统计和万年历

完全数统计和万年历

作者: Captain_mj | 来源:发表于2017-05-28 12:33 被阅读0次

    完成这两题花费了很长时间。主要在万年历的分析上,刚开始思路不是很明朗,如何计算一个月的1号是星期几,想来很长时间。下面就对这两题的解决过程做个记录。

    一、 求1000以内的完全数有哪些

    这一题的解题思路与统计100以内的素数相同。

    代码如下:
     #!/usr/bin/python
    # -*- coding:utf-8 -*-
    # __author__: Captain_mj
    
    #题目:打印万年历
    '''
    打印万年历条件:
    1、闰年条件:能被4整除且不能被100整除,或能被400整除
    2、1900年1月1日 是周一
    3、不使用系统函数或库;一个函数实现一个功能
    
    打印万年历的功能步骤:
    *判断闰年
    *判断当月有多少天
    *这个月的1号是从周几开始的
    *格式化打印日历
    '''
    
    #判断闰年(366天)
    def is_leap_year(year):
        if year%4 == 0 and year%100 != 0 or year%400 == 0:
            return True
        else:
            return False
    
    
    #判断每月的天数
    def get_month_days(year, month):
        bimonth = (4, 6, 9, 11)
        if month == 2:
            if is_leap_year(year):
                days = 29
            else:
                days = 28
        elif month in bimonth:
            days = 30
        else:
            days = 31
        return days
    
    
    #判断从1900年到输入年月的天数
    def total_days(year, month):
        tot_days = 0
        for i in range(1900, year):
            if is_leap_year(i):
                tot_days =+ 366
            else:
                tot_days += 365
        for i in range(1, month):
            tot_days += get_month_days(year, i)
        return tot_days
    
    
    #主函数
    def main():
        year = input("请输入年份:")
        month = input("请输入年份:")
        print('\t'*3+month+'月','\t'+year+'年')
        print("Sun\t Mon\t Tue\t Wed\t Thu\t Fir\t Sat")
        year = int(year)
        month = int(month)
    
        '''
        weekday = (total_days(year, month)%7)+1 #判断给定月份1号是星期几
        print('\t'*weekday, end='')
        if weekday%7 == 0:
            print('')
    
        for i in range(1,get_month_days(year, month)+1): #判断给定月份天数并格式化输出
            print(i, '\t', end='')
            if (weekday+i)%7 == 0:
                print('')
    
        '''
        count = 0
        for i in range(total_days(year, month)%7+1):
            print('\t', end='')
            count += 1
            if count%7 == 0:
                print('')
    
        for i in range(1, get_month_days(year, month)+1):
            print(i, end='')
            print('\t', end='')
            count += 1
            if count%7 == 0:
                print('')
    
    
    if __name__ == '__main__':
        while True:
            main()
            print('')
    
    
        '''
        weekday = (total_days(year, month)%7)+1 #判断给定月份1号是星期几
        print('\t'*weekday, end='')
    
        for i in range(1,get_month_days(year, month)+1): #判断给定月份天数并格式化输出
            print(i, '\t', end='')
            if (weekday+i)%7 == 0:
                print('')
        '''
    
        count = 0
        for i in range(total_days(year, month)%7+1):
            print('\t', end='')
            count += 1
    
        for i in range(1, get_month_days(year, month)+1):
            print(i, end='')
            print('\t', end='')
            count += 1
            if count%7 == 0:
                print('')
    
    
    if __name__ == '__main__':
        while True:
            main()
            print('')
    
    

    分析过程中逻辑思维应该是没有问题的,但是在格式化输出的时候遇到了问题。格式化输出写了两个方法都有同样的问题,输出的格式有误导致整个日期显示错误,参考了几个答案,对比发现是差不多的,不知道问题出在什么地方,先发出来,各位大神帮我看看什么地方有问题,万分感谢!

    下面是输出的结果:
    万年历输出结果.png

    相关文章

      网友评论

        本文标题:完全数统计和万年历

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