Staging
v0.5.1
v0.5.1
https://github.com/python/cpython
Tip revision: 1da43e5e916949c8e849e656d9d05fa4b9d6836c authored by Benjamin Peterson on 26 June 2009, 13:21:52 UTC
rearrange the sections of the README, so they'll hopefully be more in the order people will interested in
rearrange the sections of the README, so they'll hopefully be more in the order people will interested in
Tip revision: 1da43e5
unbirthday.py
#! /usr/bin/env python
# Calculate your unbirthday count (see Alice in Wonderland).
# This is defined as the number of days from your birth until today
# that weren't your birthday. (The day you were born is not counted).
# Leap years make it interesting.
import sys
import time
import calendar
def raw_input(prompt):
sys.stdout.write(prompt)
sys.stdout.flush()
return sys.stdin.readline()
def main():
# Note that the range checks below also check for bad types,
# e.g. 3.14 or (). However syntactically invalid replies
# will raise an exception.
if sys.argv[1:]:
year = int(sys.argv[1])
else:
year = int(input('In which year were you born? '))
if 0<=year<100:
print("I'll assume that by", year, end=' ')
year = year + 1900
print('you mean', year, 'and not the early Christian era')
elif not (1850<=year<=2002):
print("It's hard to believe you were born in", year)
return
#
if sys.argv[2:]:
month = int(sys.argv[2])
else:
month = int(input('And in which month? (1-12) '))
if not (1<=month<=12):
print('There is no month numbered', month)
return
#
if sys.argv[3:]:
day = int(sys.argv[3])
else:
day = int(input('And on what day of that month? (1-31) '))
if month == 2 and calendar.isleap(year):
maxday = 29
else:
maxday = calendar.mdays[month]
if not (1<=day<=maxday):
print('There are no', day, 'days in that month!')
return
#
bdaytuple = (year, month, day)
bdaydate = mkdate(bdaytuple)
print('You were born on', format(bdaytuple))
#
todaytuple = time.localtime()[:3]
todaydate = mkdate(todaytuple)
print('Today is', format(todaytuple))
#
if bdaytuple > todaytuple:
print('You are a time traveler. Go back to the future!')
return
#
if bdaytuple == todaytuple:
print('You were born today. Have a nice life!')
return
#
days = todaydate - bdaydate
print('You have lived', days, 'days')
#
age = 0
for y in range(year, todaytuple[0] + 1):
if bdaytuple < (y, month, day) <= todaytuple:
age = age + 1
#
print('You are', age, 'years old')
#
if todaytuple[1:] == bdaytuple[1:]:
print('Congratulations! Today is your', nth(age), 'birthday')
print('Yesterday was your', end=' ')
else:
print('Today is your', end=' ')
print(nth(days - age), 'unbirthday')
def format(xxx_todo_changeme):
(year, month, day) = xxx_todo_changeme
return '%d %s %d' % (day, calendar.month_name[month], year)
def nth(n):
if n == 1: return '1st'
if n == 2: return '2nd'
if n == 3: return '3rd'
return '%dth' % n
def mkdate(xxx_todo_changeme1):
# Januari 1st, in 0 A.D. is arbitrarily defined to be day 1,
# even though that day never actually existed and the calendar
# was different then...
(year, month, day) = xxx_todo_changeme1
days = year*365 # years, roughly
days = days + (year+3)//4 # plus leap years, roughly
days = days - (year+99)//100 # minus non-leap years every century
days = days + (year+399)//400 # plus leap years every 4 centirues
for i in range(1, month):
if i == 2 and calendar.isleap(year):
days = days + 29
else:
days = days + calendar.mdays[i]
days = days + day
return days
if __name__ == "__main__":
main()