2012-04-16 7 views
1

저는 파이썬을 사용하여 1950-2050 년의 13 번째 금요일의 수를 계산하려고합니다 (저는 조금 늦었습니다). 나는 사용할 날짜/달력 패키지에 익숙하지 않다. 이견있는 사람?카운트 날짜 파이썬

+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

파이썬에서 반복되는 버그를 본 적이 있습니다. 3 월 1 일부터 1 개월 전에 다시 뛰는 것. 좋습니다, 기술적으로 반복적이지는 않지만, 저는 말합니다. 몇 달 동안 시간 조작에 의존하는 것은 위험합니다. "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의이 다섯 개 가지 인수를 참조하십시오 : 당신은 패키지로 설치되는 dateutil 패키지가 필요합니다 dtstartbymonthday가 13 untilbyweekday 사이에 모든 rrule.DAILY (일) 촬영입니다 rrule.FR (금) .