2012-04-16 14 views
1

私は、Pythonを使用して1950年から2050年までの13日の金曜日の数を数えようとしています(少し遅れて知っています)。私は、使用する日付/カレンダーパッケージに慣れていません。何かご意見は?Count Count in Python

+1

try ['datetime'](http://docs.python.org/library/datetime.html) – JBernardo

+0

好奇心から離れて宿題がありません。 – mike

答えて

6

これは直接的な解決策を持っています。今月の13日が金曜日である回数をカウントする合計を使用します。

>>> from datetime import datetime # the function datetime from module datetime 
>>> sum(datetime(year, month, 13).weekday() == 4 
     for year in range(1950, 2051) for month in range(1,13)) 
174 
0

運動や宿題のようなものですか?私はそれを解決したことをかすかに覚えています。私はあなたにヒントを与えることができます、私は使用したようですCalendar.itermonthdays2もちろんそれを解決する他の方法もあるはずです。

+0

Pythonで何ヶ月も反復するバグを見ました。物事は3月1日から1ヶ月後にジャンプするのが好きです。 OK、技術的には反復ではありませんが、私は数ヶ月にわたる時間操作に頼るのは面倒だと言っています。 "1ヶ月"を構成する期間の固定された定義はありません。 .. – Endophage

0

音が宿題のようです。ヒント(平日4金曜日です):

import datetime 
print(datetime.datetime(1950,1,13).weekday()) 
2

金曜日には4.またisoweekday()ありますですので、datetime.dateクラスは、あなたの整数として(0からインデックス付き)曜日を与えるweekday()機能を持っていますそれは1からのインデックスを作成する、それはあなたが好むあなた次第です。

とにかく、簡単な解決策は次のようになります。

friday13 = 0 
months = range(1,13) 
for year in xrange(1950, 2051): 
    for month in months: 
     if date(year, month, 13).weekday() == 4: 
      friday13 += 1 
+0

私は 'months = range(0,13)'を 'months = range(13)'に簡略化できると信じています –

+0

@NolenRoyalty私の宿題ではなく、私が大学にいたときに、手助けをすること。しかし、範囲の良い点...私は通常、習慣から非常に明示的ですが、それは本当に '0'を必要としないものです。 – Endophage

+1

あなたの宿題はありませんが、[宿題を処理するための示唆された方法](http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions)が適切です。 –

0

他のソリューションは、明確かつシンプルですが、以下のいずれかが、より「calendarist」です。

from datetime import datetime 
from dateutil import rrule 

fr13s = list(rrule.rrule(rrule.DAILY, 
         dtstart=datetime(1950,1,13), 
         until=datetime(2050,12,13), 
         bymonthday=[13], 
         byweekday=[rrule.FR])) 
# this returns a list of 174 datetime objects 

あなたはrrule.rruleのこれらの5つの引数を参照してください:あなたがパッケージとしてインストール可能ですdateutilパッケージ、必要があるでしょうdtstartbymonthdayが13でuntilbyweekday間のすべてのrrule.DAILY(日)取りをさrrule.FR(金曜日) 。