開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- Python 3.5 (プログラミング言語)
Think Python (Allen B. Downey (著)、 O'Reilly Media)のChapter 17.(Classes and Methods)のExercises 17-1.(No. 3929)を取り組んでみる。
Exercises 17-1.(No. 3929)
コード(Emacs)
#!/usr/bin/env python3 # -*- coding: utf-8 -*- class Time: def __init__(self, hour=0, minute=0, second=0): self.seconds = hour * 60 * 60 + minute * 60 + second def __str__(self): minute, second = divmod(self.seconds, 60) hour, minute = divmod(minute, 60) return '%.2d:%.2d:%.2d' % (hour, minute, second) def print_time(self): print(str(self)) def time_to_int(self): return self.seconds def is_after(self, other): return self.time_to_int() > other.time_to_int() def __add__(self, other): if isinstance(other, Time): return self.add_time(other) else: return self.increment(other) def __radd__(self, other): return self.__add__(other) def add_time(self, other): assert self.is_valid() and other.is_valid() seconds = self.time_to_int() + other.time_to_int() return int_to_time(seconds) def increment(self, seconds): seconds += self.time_to_int() return int_to_time(seconds) def is_valid(self): return 0 <= self.seconds < 24 * 60 * 60 def int_to_time(seconds): time = Time(0, 0, seconds) return time def main(): start = Time(9, 45, 00) start.print_time() end = start.increment(1337) #end = start.increment(1337, 460) 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()
入出力結果(Terminal, IPython)
$ ./Time2.py 09:45:00 10:07:17 Is end after start? True Using __str__ 09:45:00 10:07:17 11:20:00 10:07:17 10:07:17 Example of polymorphism 23:01:00 $
0 コメント:
コメントを投稿