python生成某年某月日历

class WanNianLi(object):
    def __init__(self):
        self.wan_nian_li()

    ##判断是否闰年
    def isleap(self, year):
        if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
            return True
        else:
            return False

    ##判断每个月有多少天
    def get_month_days(self, year, month):
        if month in [1, 3, 5, 7, 8, 10, 12]:
            return 31
        elif month in [4, 6, 9, 11]:
            return 30
        else:
            if self.isleap(year):
                return 28
            else:
                return 29

    # 统计1900年1月1日到输入的day_now这天一共多少天
    def sum_day(self, year_in, month_in, day_now, day_in):
        '''
        #计算1900年1月1日到输入的年月日的天数
        :param year_in:
        :param month_in:
        :param day_in:
        :return:
        '''
        # 计算今年1月1日到用户输入的月份的前一个月有多少天
        day_long = 0
        for i in range(1, month_in):
            day_long += self.get_month_days(year_in, i)
        # 再加上输入的月份的日子,按1号计算,到此为止计算完成所有的天数
        day_long += day_in
        # print('1月1日到%d月%d日有%d天'%(month_in,day_in,day_long))

        # 计算1900年1月1日到输入的年月日的天数
        day1900toNow = day_now + day_long
        # print('1900年1月1日到%d年%d月%d日有%d天'%(year_in,month_in,day_in,day1900toNow))
        return day1900toNow

    # 获得查询的日子day_in是周几
    def get_week(self, year_in, month_in, day_now, day_in):
        '''
        # 计算输入月的星期数,1900年1月1日是星期一
        :param year_in:
        :param month_in:
        :param day_in:
        :return:
        '''
        # 计算输入月的星期数,1900年1月1日是星期一
        week = self.sum_day(year_in, month_in, day_now, day_in) % 7
        if week == 0:
            week = 7
        # print("%d年%d月%d日是星期%s" % (year_in, month_in, day_in, week))
        return week

    def wan_nian_li(self):
        year_in = int(input("InPut the Year:"))
        month_in = int(input("InPut the Month:"))
        # 判断是不是闰年
        if self.isleap(year_in):
            print("%d是闰年" % year_in)
        else:
            print("%d不是闰年" % year_in)
        # 获取这个月有多少天数
        day_num = self.get_month_days(year_in, month_in)
        print("%d年%d月有%d天" % (year_in, month_in, day_num))

        # 计算从1900到去年完整的年有多少天
        day_now = 0
        for i in range(1900, year_in):
            if self.isleap(year_in):
                day_now += 366
            else:
                day_now += 365
        print("从1900年到%d年有%d天" % (year_in, day_now))

        ##格式化
        print("日\t一\t二\t三\t四\t五\t六\t")
        day_week = self.get_week(year_in, month_in, day_now, 1)  # 这个月的1号是周几
        print("\t" * day_week, end='')  # 这个月的1号是周几,就在前面加几个"\t"
        for day in range(1, self.get_month_days(year_in, month_in) + 1):
            print(day, '\t', end='')
            if self.get_week(year_in, month_in, day_now, day) == 6:  # 如果是周六就换行
                print()


if __name__ == '__main__':
    WanNianLi()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值