# David Madore's WebLog: A script in Python

(Saturday)

## A script in Python

I've written my first program in Python: it's a cgi script which computes and displays the Gregorian solar and lunar calendars for any given year. I had started writing it in Perl, but I realized that Perl has no operator for integer division (!!!) and I need a lot of integer divisions in that script. So I gave up on Perl and decided to use Python instead.

Incidentally, I'm amazed by how few programming languages have a “sane” behavior for integer division and integer modulus when the dividend is negative: namely for `(-2)/5` to be `-1` (and not `0`) and for `(-2)%5` to be `3` (and not `-2`); apparently this is because (most?) silicon implementations have the totally ludicrous behaviour which makes `(-2)/5` equal to `0` (so that `(3-5)/2` is not equal to `3/2-1`, which is really stupid). Anyway, Python has the sane behavior, whereas C does not.

I'm not enthusiastic: Python has some annoying misfeatures, for example the lack of the ternary `x?y:z` construction of C/C++/Perl, or a `print` construct which automatically adds a newline. On the other hand, Python is definitely cleaner than Perl (that's not too hard, though!) and has some nice features (I very much like the formatting `%` operator).

Anyway, you can see, with the names I had suggested for the lunar months, that today (November 8 of 2003) is Novil 14 of 2003. Consequently, it is a full moon (theoretical full moons fall on the 14th of every lunar month, and they agree more or less accurately with real full moons: typically to within a day). Actually, it is better than that: there is a full lunar eclipse tonight (maximality is at 2003-11-09T01:19Z). (For those who wonder why I'm not writing Full Moon next to this 'blog's entry, it is because I align the Moon phases indications on universal time and the full moon is ever so slightly past midnight GMT.)