python万年历

__author__='XXX'
def is_leap_year(year):    #判断是否为闰年
    if year % 4==0 and year % 100  != 0 or year % 400 == 0:
        return True
    else:
        return False

def get_num_of_days_in_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 is_leap_year(year):
        return 29
    else:
        return 28

def get_total_num_of_day(year,month):     #自1800年1月1日以来过了多少天
    days=0
    for y in range(1800,year):
        if is_leap_year(y):
            days+=366
        else:
            days+=365
    for m in range(1,month):
        days+=get_num_of_days_in_month(year,m)
    return days
def get_start_day(year,month):        #返回当月1日是星期几,由1800.10.10是星期三推算
    return(3+get_total_num_of_day(year,month))%7
month_dict={1:'January',2:'February',3:'March',4:'April',5:'May',6:'June',7:'July',8:'August',9:'September',10:'October',11:'November',12:'December'}
#月份与名称对应的字典
def get_month_name(month):       #返回当月的名称
    return month_dict[month]
def print_month_title(year,month):  #打印日历的首部
    print('         ',get_month_name(month),'   ',year,'         ')
    print('-----------------------------------'  )
    print(' Sun  Mon  Tue  Wed  Thu  Fri  Sat  ' )
def print_month_body(year,month):
    '''''
    打印日历正文
    格式说明:空两格空格,每天的长度为5
    需要注意的是print加逗号会多一个空格
    '''
    i=get_start_day(year,month)  #print(i)
    print('     '*i,end='')  #从星期几开始则空5*几个空格
    for j in range(1,get_num_of_days_in_month(year,month)+1):
        print('%5d'%j,end='')  #宽度控制,4+1=5
        i+=1
        if i % 7 ==0:  #i用于计数和换行
            print('')#每换行一次行首继续空格

year=int(input("Please input target year:"))  #主函数部分
month=int(input("Please input target month:"))
print_month_title(year,month)
print_month_body(year,month)

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值