3 # Calculate your unbirthday count (see Alice in Wonderland).
4 # This is defined as the number of days from your birth until today
5 # that weren't your birthday. (The day you were born is not counted).
6 # Leap years make it interesting.
14 year
= int(sys
.argv
[1])
16 year
= int(raw_input('In which year were you born? '))
18 print "I'll assume that by", year
,
20 print 'you mean', year
, 'and not the early Christian era'
21 elif not (1850 <= year
<= time
.localtime()[0]):
22 print "It's hard to believe you were born in", year
26 month
= int(sys
.argv
[2])
28 month
= int(raw_input('And in which month? (1-12) '))
29 if not (1 <= month
<= 12):
30 print 'There is no month numbered', month
34 day
= int(sys
.argv
[3])
36 day
= int(raw_input('And on what day of that month? (1-31) '))
37 if month
== 2 and calendar
.isleap(year
):
40 maxday
= calendar
.mdays
[month
]
41 if not (1 <= day
<= maxday
):
42 print 'There are no', day
, 'days in that month!'
45 bdaytuple
= (year
, month
, day
)
46 bdaydate
= mkdate(bdaytuple
)
47 print 'You were born on', format(bdaytuple
)
49 todaytuple
= time
.localtime()[:3]
50 todaydate
= mkdate(todaytuple
)
51 print 'Today is', format(todaytuple
)
53 if bdaytuple
> todaytuple
:
54 print 'You are a time traveler. Go back to the future!'
57 if bdaytuple
== todaytuple
:
58 print 'You were born today. Have a nice life!'
61 days
= todaydate
- bdaydate
62 print 'You have lived', days
, 'days'
65 for y
in range(year
, todaytuple
[0] + 1):
66 if bdaytuple
< (y
, month
, day
) <= todaytuple
:
69 print 'You are', age
, 'years old'
71 if todaytuple
[1:] == bdaytuple
[1:]:
72 print 'Congratulations! Today is your', nth(age
), 'birthday'
73 print 'Yesterday was your',
75 print 'Today is your',
76 print nth(days
- age
), 'unbirthday'
78 def format((year
, month
, day
)):
79 return '%d %s %d' % (day
, calendar
.month_name
[month
], year
)
82 if n
== 1: return '1st'
83 if n
== 2: return '2nd'
84 if n
== 3: return '3rd'
87 def mkdate((year
, month
, day
)):
88 # January 1st, in 0 A.D. is arbitrarily defined to be day 1,
89 # even though that day never actually existed and the calendar
90 # was different then...
91 days
= year
*365 # years, roughly
92 days
= days
+ (year
+3)//4 # plus leap years, roughly
93 days
= days
- (year
+99)//100 # minus non-leap years every century
94 days
= days
+ (year
+399)//400 # plus leap years every 4 centirues
95 for i
in range(1, month
):
96 if i
== 2 and calendar
.isleap(year
):
99 days
= days
+ calendar
.mdays
[i
]
103 if __name__
== "__main__":