关于python中的日期推算

c=0

import calendar

for year in xrange(1901,1902):

for month in xrange(1,13):

if calendar.monthcalendar(year,month)[0].index(1) == 6:

c += 1

print c

其中的if calendar.monthcalendar(year,month)[0].index(1) == 6:是什么意思,括号内和方括号内的参数又是什么意思

#coding=utf-8
'''
Created on 2014-12-29

@author: NeoWu
'''
c=0
import calendar
for year in xrange(1901,1902):
    for month in xrange(1,13):
        '''
        1.加了些打印帮助你理解
        2.calendar.monthcalendar(year,month)这个返回的是传入的那一年的某个月的【星期列表】:
        [[0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0]]

        3.calendar.monthcalendar(year,month)[0]取的列表中的第一个元素:
        [0, 0, 0, 0, 0, 0, 1]
        4.calendar.monthcalendar(year,month)[0].index(1)返回1出现的位置
                    代码中判断该值为6,意思是,这个月的1号是星期6
        '''
        if calendar.monthcalendar(year,month)[0].index(1) == 6:
            #--------------------------------------------------
            print 'Date: %d-%d(year-month)' % (year,month)
            print 'Sun\tMon\tTue\tWed\tThu\tFri\tSat'
            for e in calendar.monthcalendar(year,month):
                print '%d\t%d\t%d\t%d\t%d\t%d\t%d' % (e[0],e[1],e[2],e[3],e[4],e[5],e[6])
            #--------------------------------------------------
            print calendar.monthcalendar(year,month)
            print calendar.monthcalendar(year,month)[0]
            print calendar.monthcalendar(year,month)[0].index(1)
            c += 1
    print c

结果:

Date: 1901-9(year-month)
Sun Mon Tue Wed Thu Fri Sat
0 0 0 0 0 0 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 0 0 0 0 0 0
[[0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0]]
[0, 0, 0, 0, 0, 0, 1]
6
Date: 1901-12(year-month)
Sun Mon Tue Wed Thu Fri Sat
0 0 0 0 0 0 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 0 0 0 0 0
[[0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0]]
[0, 0, 0, 0, 0, 0, 1]
6
2

追问

代码中判断该值为6,意思是,这个月的1号是星期6?应该是星期天吧

追答

是星期六,你可以查下符合条件的那天是不是星期六

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-29

calendar.monthcalendar(year,month)返回year年month月月历的列表,

比如:

>>> print calendar.monthcalendar(2014,12)
[[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, 0, 0, 0, 0]]
>>> calendar.monthcalendar(2014,11)
[[0, 0, 0, 0, 0, 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]]

calendar.monthcalendar(2014,12)[0]=[1, 2, 3, 4, 5, 6, 7]

calendar.monthcalendar(2014,11)[0]=[0, 0, 0, 0, 0, 1, 2]

calendar.monthcalendar(2014,12)[0].index(1)=0    #[1, 2, 3, 4, 5, 6, 7]中1的索引

calendar.monthcalendar(2014,11)[0].index(1)=5    #[0, 0, 0, 0, 0, 1, 2]中1的索引

其索引值也就是星期几,所以

if calendar.monthcalendar(year,month)[0].index(1) == 6:应该是判断year年month月的1号是不是星期日


祝你成功!

相似回答