标签:def 判断 += and 不同 计算 turn 打印 int
判断闰年:
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()
标签:def 判断 += and 不同 计算 turn 打印 int
原文地址:https://www.cnblogs.com/yj920/p/9969487.html