forked from AllenDowney/ThinkPython
-
Notifications
You must be signed in to change notification settings - Fork 5
/
Time2_soln.py
102 lines (75 loc) · 2.52 KB
/
Time2_soln.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
"""
Code example from Think Python, by Allen B. Downey.
Available from http://thinkpython.com
Copyright 2012 Allen B. Downey.
Distributed under the GNU General Public License at gnu.org/licenses/gpl.html.
"""
class Time(object):
"""Represents the time of day.
attributes: hour, minute, second
"""
def __init__(self, hour=0, minute=0, second=0):
minutes = hour * 60 + minute
self.seconds = minutes * 60 + second
def __str__(self):
minutes, second = divmod(self.seconds, 60)
hour, minute = divmod(minutes, 60)
return '%.2d:%.2d:%.2d' % (hour, minute, second)
def print_time(self):
print str(self)
def time_to_int(self):
"""Computes the number of seconds since midnight."""
return self.seconds
def is_after(self, other):
"""Returns True if t1 is after t2; false otherwise."""
return self.seconds > other.seconds
def __add__(self, other):
"""Adds two Time objects or a Time object and a number.
other: Time object or number of seconds
"""
if isinstance(other, Time):
return self.add_time(other)
else:
return self.increment(other)
def __radd__(self, other):
"""Adds two Time objects or a Time object and a number."""
return self.__add__(other)
def add_time(self, other):
"""Adds two time objects."""
assert self.is_valid() and other.is_valid()
seconds = self.seconds + other.seconds
return int_to_time(seconds)
def increment(self, seconds):
"""Returns a new Time that is the sum of this time and seconds."""
seconds += self.seconds
return int_to_time(seconds)
def is_valid(self):
"""Checks whether a Time object satisfies the invariants."""
return self.seconds >= 0 and self.seconds < 24*60*60
def int_to_time(seconds):
"""Makes a new Time object.
seconds: int seconds since midnight.
"""
return Time(0, 0, seconds)
def main():
start = Time(9, 45, 00)
start.print_time()
end = start.increment(1337)
end.print_time()
print 'Is end after start?',
print end.is_after(start)
print 'Using __str__'
print start, end
start = Time(9, 45)
duration = Time(1, 35)
print start + duration
print start + 1337
print 1337 + start
print 'Example of polymorphism'
t1 = Time(7, 43)
t2 = Time(7, 41)
t3 = Time(7, 37)
total = sum([t1, t2, t3])
print total
if __name__ == '__main__':
main()