完全数统计和万年历

完成这两题花费了很长时间。主要在万年历的分析上,刚开始思路不是很明朗,如何计算一个月的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('')

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

下面是输出的结果:
完全数统计和万年历_第1张图片
万年历输出结果.png

你可能感兴趣的:(完全数统计和万年历)