关于月的日历

代码:

#WanNianLi_Month. py
# coding=utf-8
__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_day_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_day_in_month(year, m)
   return  days
def get_start_day(year, month):
   #返回当月1日是星期几,由1800.01.01是星期几来算
   return  (3 + get_total_num_of_day(year, month)) % 7
#月份与名称对应的字典
month_dict = {1:'January', 2:'February', 3:'March', 4:'April', 5:'May', 6:'Jne', 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 MOon 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_day_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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值