python 万年历 以1800年开始

直接上代码,比较简单懒得写注释了

def is_leap_year(year):
    if(year%4==0 and year%100!=0) or (year%400==0):
        return 1
    else:
        return 0



def get_num_of_day_in_month(year,month):
    if month==2:
        if is_leap_year(year):
            days=29
        else:
            days=28
    elif month in[4,6,9,11]:
        days=30
    else:
        days=31
    return days


def get_total_num_of_day(year, month):
    yearday = 0
    for i in range(1800, year):
        if is_leap_year(i):
            yearday += 366
        else:
            yearday += 365
    for i in range(1, month):
        yearday += get_num_of_day_in_month(year, i)
    return yearday


def print_information_title(year,month):
    if year < 1800 :
        print("小于1800,请重新输入一个年份")
        return False
    else:
        print((str(year)+"年").ljust(10),end="")
        print((str(month)+"月").rjust(14))
        return True


year=int(input("请输入一个不小于1800年的年份"))
month=int(input("请输入月份"))
if  print_information_title(year,month):
    week=(get_total_num_of_day(year,month))%7
    test = week - 4 if week >= 4 else week + 3
    print('日\t一\t二\t三\t四\t五\t六\t')
    for i in range(0,test):
        print("\t",end="")
    for i in range(1,get_num_of_day_in_month(year,month)+1):
        if (get_total_num_of_day(year,month)+i)%7==4:
            print(i,end="\n")
        else:
            print(i,end="\t")
else:
    pass