Python实战:打印万年历

Posted yj920

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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()

 

以上是关于Python实战:打印万年历的主要内容,如果未能解决你的问题,请参考以下文章

算法,java代码实现打印万年历

Python中如何将2000年1月1日至2020年12月31号,每一天的日期信息都打印出来?Python编程?

编写万年历:输入一个年份,再输入一个月份,把那个月的日历打印出来(1900年1月1日是星期一)

java实验之打印万年历

打印万年历

Java实验项目二打印万年历