You are given the following information, but you may prefer to do some research for yourself.
How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
这道题,一开始读题误解了意思,浪费了不少时间。注意要求解的是21世纪里有多少个星期天发生在一个月的第一天。
开始自己没用库类,活生生的写出了下面的代码:
def yearbeginweek(year): """ Function to calculate the week of the first day in a year""" yearrange = range(1900, year) days = 0 for x in yearrange: if x in leapyears: days = days + 366 else: days = days + 365 return 1 + days % 7 week = {1: "Mon", 2: "Tue", 3: "Wen", 4: "Thr", 5: "Fri", 6: "Sat", 7: "Sun"} years = range(1900, 2001) leapyears = [x for x in years if (x % 4 == 0 and x % 100 != 0) or (x % 100 == 0 and x % 400 == 0)] nonleapyears = [x for x in years if not x in leapyears] leapdays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30] nonleapdays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30] suncount = 0 for year in range(1901, 2001): # Calculate the first week day in the year begin = yearbeginweek(year) if begin == 7: suncount += 1 begin = 0 # If it is a leap year if year in leapyears: for days in leapdays: if (begin + days % 7) % 7 == 0: suncount += 1 begin = (begin + days % 7) % 7 else: for days in nonleapdays: if (begin + days % 7) % 7 == 0: suncount += 1 begin = (begin + days % 7) % 7 print suncount
这个比较囧,后来看了有个Datetime module,一句话就可以解决这个问题了:
import datetime print len([datetime.date(year, month, 1) for year in range(1901, 2001) for month in range(1, 13) if datetime.date(year, month, 1).weekday() == 6])
这不得不佩服python的类库实在强大。