问题描述:

黑色星期五源于西方的宗教信仰与迷信:耶稣基督死在星期五,而13是不吉利的数字。两者的结合令人相信当天会发生不幸的事情。星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的13日又恰逢星期五就叫“黑色星期五”。找出未来几年哪些天是“黑色星期五”。


我的代码:

#coding=utf-8
import calendar
import time
import datetime
print "星期0表示是星期一..."
def week(year,month,day=13):
    blackfriday=datetime.datetime(year,month,day).strftime("%w")
    if int(blackfriday)==5:
        print "%d年%d月13号是黑色星期五..." % (year,month)
        print ""

years=[]
months=range(1,13,1)
day=13
while True:
    year=int(raw_input("输入年份(输入2333时退出):"))
    if year==2333:
        break
    else:
        years.append(year)

for y in years:
    print "%d年的日历为:" % y
    calendar.prcal(y)
    for m in   months:
        week(y,m,day)


我的思路:

以2016年为例,当初想到的就是先输出16年全年的日历,然后根据for循环遍历12个月的日历,通过某个函数输出每个月13号对应的是星期几,最后再判断是否等于星期五,如果是就输出;


首先定义一个函数,该函数传入年,月,日(默认13号)三个参数,通过datetime模块的datetime函数输出该天是星期几,然后判断是否为星期五并输出;


这个程序并不难,忽略了平年闰年的判断等操作,很容易读懂,但是写起来真不容易啊,想了好多最后还是觉得这种方法实现起来简单点;


结果:

星期0表示是星期日...

输入年份(输入2333时退出):2016

输入年份(输入2333时退出):2017

输入年份(输入2333时退出):2333

2016年的日历为:

                                  2016

      January                   February                   March

Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su

             1  2  3       1  2  3  4  5  6  7          1  2  3  4  5  6

 4  5  6  7  8  9 10       8  9 10 11 12 13 14       7  8  9 10 11 12 13

11 12 13 14 15 16 17      15 16 17 18 19 20 21      14 15 16 17 18 19 20

18 19 20 21 22 23 24      22 23 24 25 26 27 28      21 22 23 24 25 26 27

25 26 27 28 29 30 31      29                        28 29 30 31


       April                      May                       June

Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su

             1  2  3                         1             1  2  3  4  5

 4  5  6  7  8  9 10       2  3  4  5  6  7  8       6  7  8  9 10 11 12

11 12 13 14 15 16 17       9 10 11 12 13 14 15      13 14 15 16 17 18 19

18 19 20 21 22 23 24      16 17 18 19 20 21 22      20 21 22 23 24 25 26

25 26 27 28 29 30         23 24 25 26 27 28 29      27 28 29 30

                          30 31


        July                     August                  September

Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su

             1  2  3       1  2  3  4  5  6  7                1  2  3  4

 4  5  6  7  8  9 10       8  9 10 11 12 13 14       5  6  7  8  9 10 11

11 12 13 14 15 16 17      15 16 17 18 19 20 21      12 13 14 15 16 17 18

18 19 20 21 22 23 24      22 23 24 25 26 27 28      19 20 21 22 23 24 25

25 26 27 28 29 30 31      29 30 31                  26 27 28 29 30


      October                   November                  December

Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su

                1  2          1  2  3  4  5  6                1  2  3  4

 3  4  5  6  7  8  9       7  8  9 10 11 12 13       5  6  7  8  9 10 11

10 11 12 13 14 15 16      14 15 16 17 18 19 20      12 13 14 15 16 17 18

17 18 19 20 21 22 23      21 22 23 24 25 26 27      19 20 21 22 23 24 25

24 25 26 27 28 29 30      28 29 30                  26 27 28 29 30 31

31

2016年5月13号是黑色星期五...


2017年的日历为:

                                  2017

      January                   February                   March

Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su

                   1             1  2  3  4  5             1  2  3  4  5

 2  3  4  5  6  7  8       6  7  8  9 10 11 12       6  7  8  9 10 11 12

 9 10 11 12 13 14 15      13 14 15 16 17 18 19      13 14 15 16 17 18 19

16 17 18 19 20 21 22      20 21 22 23 24 25 26      20 21 22 23 24 25 26

23 24 25 26 27 28 29      27 28                     27 28 29 30 31

30 31


       April                      May                       June

Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su

                1  2       1  2  3  4  5  6  7                1  2  3  4

 3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 11

10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 18

17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 25

24 25 26 27 28 29 30      29 30 31                  26 27 28 29 30


        July                     August                  September

Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su

                1  2          1  2  3  4  5  6                   1  2  3

 3  4  5  6  7  8  9       7  8  9 10 11 12 13       4  5  6  7  8  9 10

10 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 17

17 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 24

24 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 30

31


      October                   November                  December

Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su

                   1             1  2  3  4  5                   1  2  3

 2  3  4  5  6  7  8       6  7  8  9 10 11 12       4  5  6  7  8  9 10

 9 10 11 12 13 14 15      13 14 15 16 17 18 19      11 12 13 14 15 16 17

16 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 24

23 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 31

30 31


2017年1月13号是黑色星期五...


2017年10月13号是黑色星期五...


总结:

  1. 打印某年的日历

    calendar.prcal(year)

注意:calendar.prcal(2016)的类型是<type 'NoneType'>,并不能直接对其遍历;


2.关于日期的输出格式

>>> print datetime.datetime(2016,5,13)

2016-05-13 00:00:00


加上strftime("%w")就能输出星期了

datetime.datetime(2016,5,13).strftime("%w")

'5'


>>> print datetime.datetime(2016,5,13).strftime("%w")

5


补充:今天看了一篇文章,发现一周的表示范围是0到6,0表示星期一,自己理解为星期日了,特改正!


题目出处:http://www.cheemoedu.com/exercise/5