【Python】实战:打印万年历

判断闰年:

y可以被400整除,或y可以被4整除,但不能被100整初。满足条件则为闰年;

求一个月份的最大天数:

由于2月份的天数不同,判断是否闰年决定取28还是29;

计算某一天是该年的第几天:

d的值再加上前面所有月份天数的总和

根据公式计算这一天是星期几:

    w=(y-1)+(y-1)//400+(y-1)//4-(y-1)//100+countDays(y,m,1)
    return w%7

最后就是打印了,依此打印出每个月。

end=""

  设置不换行,当w%7==0,即日期为星期日时换行

代码如下:

 1 def isLeap(y): #判断闰年
 2     return y%400==0 or y%4==0 and y%100!=0
 3 
 4 def maxDays(y,m): #求某月的最大天数
 5     d=30
 6     if m==1 or m==3 or m==5 or m==7 or m==8 or m==10 or m==12:
 7         d=31
 8     elif m==2:
 9         d=29 if isLeap(y) else 28
10     return d
11 
12 def countDays(y,m,d): #计算某一天是这一年的第几天
13     days=d
14     if m>=2:
15         days+=31
16     if m>=3:
17         days+=29 if isLeap(y) else 28
18     if m>=4:
19         days+=31
20     if m>=5:
21         days+=30
22     if m>=6:
23         days+=31
24     if m>=7:
25         days+=30
26     if m>=8:
27         days+=31
28     if m>=9:
29         days+=31
30     if m>=10:
31         days+=30
32     if m>=11:
33         days+=31
34     if m>=12:
35         days+=30
36     return days
37 def countWeek(y,m): #计算这一天是星期几
38     w=(y-1)+(y-1)//400+(y-1)//4-(y-1)//100+countDays(y,m,1)
39     return w%7
40 def printMonth(y,m):
41     w=countWeek(y,m)
42     md=maxDays(y,m)
43     print("%-6s%-6s%-6s%-6s%-6s%-6s%-6s"%("Sum","Mon","Tue","Wed","Thu","Fri","Sat"))
44     for i in range(w): #打印一个月的日历
45         print("%-6s" % "",end="")
46     for d in range(1,md+1):
47         print("%-6d" % d,end="")
48         w=w+1
49         if w%7==0:
50             print()
51 y=input("输入年份")
52 y=int(y)
53 for m in range (1,13):
54     print()
55     print("- - - - -",y,"",m,"月- - - - -")
56     printMonth(y,m)
57     print()

猜你喜欢

转载自www.cnblogs.com/yj920/p/9969487.html