在控制台输出月历
【问题】已知年,月,在控制台输出该月的月历,比如1900年1月的月历:
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
分析:
问题的关键是需要知道那个月的第一天是星期几。
既然已经知道1900年1月1日是期一,只要算出指定月份距离1900年1月1日有多少天就可以了。
# 控制台月历
def calendar(year, month):
def is_leap_year(year):
return year % 4 == 0 and year % 100 != 0 or year % 400 ==0
M = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if is_leap_year(year): M[2] = 29
day = 0 ### 本月到1990年1月1日 有多少天
for i in range(1900,year):
day += 366 if is_leap_year(i) else 365
for i in range(1,month):
day += M[i]
### 本月1号是星期几
### 1900年1月1日是 星期一
week = (day + 1) % 7
a = [0] * week + list(range(1,M[month]+1))
print("Su Mo Tu We Th Fr Sa ", end='')
for i,x in enumerate(a):
if i % 7 == 0: print()
xs = "{:2d} ".format(x) if x != 0 else ' '
print(xs, end='')
print()
if __name__ == '__main__':
calendar(1900,1)
calendar(2020,2)
需要补基础的,可以看:小甲鱼pyhthon教程,Bilibili站上还有:[耿老师]小甲鱼python作业 解析系列,持续更新中。