- Notifications
You must be signed in to change notification settings - Fork 31.7k
/
Copy pathunbirthday.py
executable file
·104 lines (87 loc) · 3.07 KB
/
unbirthday.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#! /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.
importsys
importtime
importcalendar
defmain():
ifsys.argv[1:]:
year=int(sys.argv[1])
else:
year=int(raw_input('In which year were you born? '))
if0<=year<100:
print"I'll assume that by", year,
year=year+1900
print'you mean', year, 'and not the early Christian era'
elifnot (1850<=year<=time.localtime()[0]):
print"It's hard to believe you were born in", year
return
ifsys.argv[2:]:
month=int(sys.argv[2])
else:
month=int(raw_input('And in which month? (1-12) '))
ifnot (1<=month<=12):
print'There is no month numbered', month
return
ifsys.argv[3:]:
day=int(sys.argv[3])
else:
day=int(raw_input('And on what day of that month? (1-31) '))
ifmonth==2andcalendar.isleap(year):
maxday=29
else:
maxday=calendar.mdays[month]
ifnot (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)
ifbdaytuple>todaytuple:
print'You are a time traveler. Go back to the future!'
return
ifbdaytuple==todaytuple:
print'You were born today. Have a nice life!'
return
days=todaydate-bdaydate
print'You have lived', days, 'days'
age=0
foryinrange(year, todaytuple[0] +1):
ifbdaytuple< (y, month, day) <=todaytuple:
age=age+1
print'You are', age, 'years old'
iftodaytuple[1:] ==bdaytuple[1:]:
print'Congratulations! Today is your', nth(age), 'birthday'
print'Yesterday was your',
else:
print'Today is your',
printnth(days-age), 'unbirthday'
defformat((year, month, day)):
return'%d %s %d'% (day, calendar.month_name[month], year)
defnth(n):
ifn==1: return'1st'
ifn==2: return'2nd'
ifn==3: return'3rd'
return'%dth'%n
defmkdate((year, month, day)):
# January 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...
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
foriinrange(1, month):
ifi==2andcalendar.isleap(year):
days=days+29
else:
days=days+calendar.mdays[i]
days=days+day
returndays
if__name__=="__main__":
main()