题目:
输入年份、月份,输出当前月份日历
话不多说,先上源码:
第一种,未使用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()函数。模块包含了以下内置函数:
序号 | 函数及描述 |
---|---|
1 | calendar.calendar(year,w=2,l=1,c=6) 返回⼀个多⾏字符串格式的year年年历,3个 ⽉⼀⾏,间隔距离为c。 每⽇宽度间隔为w字符。每⾏⻓度为21* W+18+2* C。l是 每星期⾏数。 |
2 | calendar.firstweekday( ) 返回当前每周起始⽇期的设置。默认情况下,⾸次载⼊ caendar模块时返回0,即星期⼀。 |
-3- | calendar.isleap(year) 是闰年返回 True,否则为 false。>>> import calendar >>> print(calendar.isleap(2000)) True >>> print(calendar.isleap(1900)) False |
4 | calendar.leapdays(y1,y2) 返回在Y1,Y2两年之间的闰年总数。 |
5 | calendar.month(year,month,w=2,l=1) 返回⼀个多⾏字符串格式的year年month⽉ ⽇历,两⾏标题,⼀周⼀⾏。每⽇宽度间隔为w字符。每⾏的⻓度为7* w+6。l是每 星期的⾏数。 |
-6- | -calendar.monthcalendar(year,month) 返回⼀个整数的单层嵌套列表。每个⼦列表 装载代表⼀个星期的整数。Year年month⽉外的⽇期都设为0;范围内的⽇⼦都由该⽉ 第⼏⽇表示,从1开始。- |
7 | calendar.monthrange(year,month) 返回两个整数。第⼀个是该⽉的星期⼏,第⼆个是该⽉有⼏天。星期⼏是从0(星期⼀)到 6(星期⽇)。>>> import calendar >>> calendar.monthrange(2014, 11) (5, 30)(5, 30)解释:5 表示 2014 年 11 ⽉ 份的第⼀天是周六,30 表示 2014 年 11 ⽉份总共有 30 天。 |
8 | calendar.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))。- |
10 | calendar.setfirstweekday(weekday) 设置每周的起始⽇期码。0(星期⼀)到6(星 期⽇)。 |
11 | calendar.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);