2016-11-10 7 views
0

特定の月の特定の日の頻度を数えようとしています。たとえば、今月(2016年11月)には、4つの月曜日、5つの火曜日、5つの水曜日、4つの木曜日、4つの金曜日、4つの土曜日、および4つの日曜日があります。Python - 1ヶ月以内の特定日の頻度をカウントする

これまでのところ私がすでに行ったことがあります。

import calendar 
from calendar import weekday, monthrange, SUNDAY 
import datetime 

now = datetime.datetime.now() 

year, month = now.year, now.month 

days = [weekday(year, month, d) for d in range(*monthrange(year, month))] 

しかし、今月中に何回、たとえば火曜日を印刷しようとすると、間違った結果が出ました。

In [1]: print(days.count(calendar.WEDNESDAY)) 
Out [1]: 4 # should be 5 instead of 4 
In [2]: print(days.count(calendar.TUESDAY)) 
Out [2]: 5 # this one is correct 

私はPython自体の中のカレンダーをチェックすると、それは私に正しいカレンダーを示しました。

In [4]: calendar.prmonth(year, month) 

    November 2016 
Mo Tu We Th Fr Sa Su 
    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 

私の目的は、指定した月の特定の日の頻度を数えることです。どんな提案も大歓迎です。どうもありがとう。

よろしく、

アーノルドA.

答えて

1

range(start, stop)が排他的ですmonthrange(year, month)(1, 30)を返すので、範囲は29で停止します。だから少しの更新:

>>> s, e = monthrange(year, month) 
>>> days = [weekday(year, month, d) for d in range(s, e+1)] 
>>> collections.Counter(days) 
Counter({0: 4, 1: 5, 2: 5, 3: 4, 4: 4, 5: 4, 6: 4}) 
+0

あなたの助けをありがとう!できます! – arnold

1

あなたはoff-by-oneエラーを持って、範囲があなたの代わりにこれを行うことができ、エンド-1をするために、開始を通過:

[weekday(year, month, d) for d in range(1, monthrange(year, month)[1]+1)] 
関連する問題