[Brian van den Broek]

<SNIP setup of how I was wondering if I was making things too complicated with:>

import datetime
def is_leap_year(year):
   '''-> boolean

   Returns True or False as year is, or is not, a leap year.
   '''
   is_leap = True
   try:
       datetime.date(year, 2, 29)
   except ValueError:
       is_leap = False
   return is_leap

Kent Johnson said unto the world upon 2004-12-15 20:16: > I would write > def is_leap_year(year): > try: > datetime.date(year, 2, 29) > return True > except ValueError: > return False

Not an adherent of the "only one exit point" doctrine then, hey? I spent a while a few weeks ago with a bug in a function that happened because I'd not noticed that I had two return statements, so I'm leery of this at the moment. (I concede if the function was long enough to hide that from me, it was probably too long.) I also like the conceptual purity of one way in and one way out. But, in my code above, that is indeed purchased at the cost of the ugly and a bit anomalous assignment of True.

Tim Peters said unto the world upon 2004-12-15 23:14:

So far as leap years go, the obvious difference is that February has
29 days in leap years, but only 28 otherwise.  You exploit that above
by checking whether trying to construct "February 29th" raises an
exception.  That's fine.  At least an equally good way is to note that
the difference between March 1 and Februrary 28 is 2 days only in a
leap year, so:

from datetime import date, timedelta
def isleap(year):
    return (date(3, 1, year) - date(2, 28, year)).days == 2

<SNIP 2 other ways of similar style>

def isleap(year):
    return (date(year+1, 1, 1) - date(year, 1, 1)).days == 366

IOW, if you can think of one way to do it with a Boolean expression,
it's common to think of more.  And, of course, that's the kind of
practice that makes it feel natural, over time.

4 ways all shorter than mine; well, thank goodness I wasn't asking about this in Perl ;-)


Thanks for the examples. Pretty and concise often go together, but they seem not to be want to be seen with me. Implausible though my posting history may make it sound, I've done a fair bit of work in set theory and math. logic. While my proofs work, they are almost never pretty or concise. Seems like my code has similar tendencies. I appreciate the pushes in a better direction.

At least I won't be stuck for things to do when it comes time to refactor!

Thanks to both,

Brian vdB
_______________________________________________
Tutor maillist  -  [EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to