python输出日历

题目:
输入年份、月份,输出当前月份日历

话不多说,先上源码:

第一种,未使用calendar库:

#判断是否为闰年
def is_leap_year(year):
    if (year % 4 == 0 and year % 100 != 0) or year % 400 ==0:
        return True
    else:
        return False
#计算本年之前的天数
def sum_year_day(year):
    begain = 1921 #我们这里选择1921年为起始年
    sum1 = 0    
    while begain < year:
        if is_leap_year(begain):
            sum1 = sum1 + 366
        else:
            sum1 = sum1 + 365
        begain = begain + 1
    return sum1
#计算本年中本月之前的天数
def sum_month_day(year,month):
    i = 1
    sum2 = 0
    while i < month: #判断月份获取天数
        if i == 1 or i == 3 or i == 5 or i == 7 or i == 8 or i == 10 or i == 12:
            sum2 = sum2 + 31
        elif i == 2: #2月份时,判断是否为闰年
            if is_leap_year(year):
                sum2 = sum2 + 29
            else:
                sum2 = sum2 + 28
        else:
            sum2 = sum2 + 30
        i = i + 1
    return sum2
#计算当前月份天数
def current_day(year,month):
    day = 0
    if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
        day =  31
    elif month == 2:
        if is_leap_year(year):
            day =  29
        else:
            day = 28
    else:
        day = 30
    return day
#计算每个月第一周需要空出的间隔
def gap(total):
    week = (total + 1) % 7 #间隔总数
    #print(week)
    count = 0
    i = 1
    while i <= week:
        i = i + 1
        print("\t",end='')
        count = count + 1
        if count % 7 == 0:
            print()
    return count
#输出当月日期
def c_calender(year,month,total):
    s = current_day(year,month)
    day = 1
    count = gap(total)
    while day <= s:
        print(day,'\t',end='')
        day = day + 1
        count = count +1
        if count % 7 == 0:
            print()
if __name__ == '__main__':
    year = int(input('请输入年份:'))
    month = int(input('请输入月份:'))
    sum1 = sum_year_day(year)
    sum2 = sum_month_day(year,month)
    total = sum1 + sum2
    print("Sun\tMon\tTue\tWed\tThu\tFir\tSat")
    c_calender(year,month,total)

结果示例:
在这里插入图片描述
总体思路:计算总天数,对7取余,从而得出每周前面需要空出的位置

第二种:使用calendar库

**

⽇历(Calendar)模块

**
此模块的函数都是⽇历相关的,例如打印某⽉的字符⽉历。
星期⼀是默认的每周第⼀天,星期天是默认的最后⼀天。更改设置需调⽤
calendar.setfirstweekday()函数。模块包含了以下内置函数:

序号函数及描述
1calendar.calendar(year,w=2,l=1,c=6) 返回⼀个多⾏字符串格式的year年年历,3个 ⽉⼀⾏,间隔距离为c。 每⽇宽度间隔为w字符。每⾏⻓度为21* W+18+2* C。l是 每星期⾏数。
2calendar.firstweekday( ) 返回当前每周起始⽇期的设置。默认情况下,⾸次载⼊ caendar模块时返回0,即星期⼀。
-3-calendar.isleap(year) 是闰年返回 True,否则为 false。>>> import calendar >>> print(calendar.isleap(2000)) True >>> print(calendar.isleap(1900)) False
4calendar.leapdays(y1,y2) 返回在Y1,Y2两年之间的闰年总数。
5calendar.month(year,month,w=2,l=1) 返回⼀个多⾏字符串格式的year年month⽉ ⽇历,两⾏标题,⼀周⼀⾏。每⽇宽度间隔为w字符。每⾏的⻓度为7* w+6。l是每 星期的⾏数。
-6--calendar.monthcalendar(year,month) 返回⼀个整数的单层嵌套列表。每个⼦列表 装载代表⼀个星期的整数。Year年month⽉外的⽇期都设为0;范围内的⽇⼦都由该⽉ 第⼏⽇表示,从1开始。-
7calendar.monthrange(year,month) 返回两个整数。第⼀个是该⽉的星期⼏,第⼆个是该⽉有⼏天。星期⼏是从0(星期⼀)到 6(星期⽇)。>>> import calendar >>> calendar.monthrange(2014, 11) (5, 30)(5, 30)解释:5 表示 2014 年 11 ⽉ 份的第⼀天是周六,30 表示 2014 年 11 ⽉份总共有 30 天。
8calendar.prcal(year, w=0, l=0, c=6, m=3) 相当于 print (calendar.calendar(year, w=0, l=0, c=6, m=3))。
-9--calendar.prmonth(theyear, themonth, w=0, l=0) 相当于 print(calendar.month(theyear, themonth, w=0, l=0))。-
10calendar.setfirstweekday(weekday) 设置每周的起始⽇期码。0(星期⼀)到6(星 期⽇)。
11calendar.timegm(tupletime) 和time.gmtime相反:接受⼀个时间元组形式,返回该 时刻的时间戳(1970纪元后经过的浮点秒数)。
-12--calendar.weekday(year,month,day) 返回给定⽇期的⽇期码。0(星期⼀)到6(星 期⽇)。⽉份为 1(⼀⽉) 到 12(12⽉)。-
import calendar

# 获取一个月的日历
year = int(input('请输入年份:'))
month = int(input('请输入月份:'))
calendar.setfirstweekday(6)
cal = calendar.month(year, month);
print("日历如下:");
print(cal);

结果:

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值