[Edu-sig] Teaching Python with the Calendar
Gregor Lingl
glingl at aon.at
Sun Nov 14 11:50:53 CET 2004
Very interesting, Kirby!
Would you mind to publish the source of the cgi-script,
e.g. provide it as an attachment?
As a first step I'd like to try to produce an Austrian version
of your calendar (different holidays, of course).
Regards,
Gregor
Kirby Urner schrieb:
>Since starting with Python tutoring, I've already learned a lot. For
>example, I'm a new convert to this technique of programming around the
>Gregorian calendar (that's the familiar one, to us ISO-Latin types).
>
>It's a good mix of real world and abstraction, in that figuring the holidays
>is kinda messy (given the calendar is -- leap year and all that), yet coded
>solutions exist (most easily within the epoch -- I've not ventured outside
>it).
>
>For example, Columbus Day is the Monday nearest to October 12th. Here's my
>code for that:
>
>def getcolday(y):
> """
> Get Columbus Day, return daynum
> Monday closest to Oct 12
> """
> i = j = 12
> while calendar.weekday(y, 10, i) <> 0:
> i -= 1
> while calendar.weekday(y, 10, j) <> 0:
> j += 1
> if abs(12-i) > abs(12-j):
> closest = j
> else:
> closest = i
> return getdaynum(y, 10, closest)
>
>def getdaynum(y, m, d):
> """
> Return day number
> """
> return time.localtime(time.mktime((y, m, d, 0, 0, 0, 0, 0, 0)))[7]
>
>What gets returned is an integer between 1 and 365 (or 366 on leap years),
>which I then use against a dictionary that looks like this (my student
>compiled it -- I credit him in the comments, but redact for here):
>
>def alldates(year):
> """
> Returns all the dates of holidays in a year in a dictionary
> Compiled by xxx
> """
> leap = calendar.isleap(year)
> easter = geteaster(year)
> easter = apply(getdaynum, easter)
> thedays = {304 + leap : 'Halloween',
> 185 + leap : 'July 4th',
> 359 + leap : 'Christmas',
> 305 + leap : 'All Saints Day',
> 306 + leap : 'All Souls Day',
> 1 : 'New Year\'s Day',
> 365 + leap : 'New Year\'s Eve',
> 315 + leap : 'Veterans Day',
> 165 + leap : 'Flag Day',
> easter : 'Easter',
> easter - 1 : 'Holy Saturday',
> easter - 2 : 'Good Friday',
> easter - 7 : 'Palm Sunday',
> easter - 40 : 'Ash Wednesday',
> getnthday(year,11,3,4) : 'Thanks- giving',
> getnthday(year,1,0,3) : "MLK B'day",
> getnthday(year,2,0,3) : "Presidents Day",
> getmemday(year) : "Memorial Day",
> getnthday(year,9,0,1) : "Labor Day",
> getcolday(year) : "Columbus Day"
> }
> return thedays
>
>Beyond just coding the holidays (I focused on some Xtian plus a few secular,
>in part because my student is interested in the Roman Catholic calendar --
>alternative dictionaries suggest themselves) there's the CGI angle.
>
>Of course this is not a new idea, I found many websites implementing it, but
>to roll one of one's own, in Python, provides a useful exercise: in cgi,
>HTML, even CSS.
>
>Here's my latest example: http://www.4dsolutions.net/cgi-bin/calendar2.cgi
>
>Kirby
>
>
>_______________________________________________
>Edu-sig mailing list
>Edu-sig at python.org
>http://mail.python.org/mailman/listinfo/edu-sig
>
>
>
>
More information about the Edu-sig
mailing list