開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの無料機能制限版、light版)
- Script言語: Python
『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のVI部(クラスとオブジェクト指向プログラミング)のまとめ演習5(Setクラス)を解いてみる。
5.
コード(TextWrangler)
#!/usr/bin/env python #encoding: utf-8 class Set: def __init__(self, value = []): self.data = [] self.concat(value) def intersect(self,other): res = [] for x in self.data: if x in other: res.append(x) return Set(res) def union(self,other): res = self.data[:] for x in other: if not x in res: res.append(x) return Set(res) def concat(self,value): for x in value: if not x in self.data: self.data.append(x) def __len__(self): return len(self.data) def __getitem__(self,key): return self.data[key] def __and__(self,other): return self.intersect(other) def __or__(self,other): return self.union(other) def __repr__(self): return repr(self.data) def __add__(self,other): return self.union(other) class SubSet(Set): def intersect(self,*others): res = [] for x in self: for other in others: if not x in other: break else: res.append(x) return Set(res) def union(*args): res = [] for arg in args: for x in arg: if not x in res: res.append(x) return Set(res) if __name__ == '__main__': a = Set([1,2,3,4,5]) b = Set([4,5,6,7,8,9,10]) print('a:',a,'b:',b) print('a & b:',a & b) print('a | b:', a | b) strs = Set(['a','b','c','d','e']) print('strs:',strs) print('index 1:',strs[1]) print('strs.__getitem__(1)',strs.__getitem__(1)) for s in strs: print(s) str = 'defghij' print('str:',str) print('strs & str:',strs & str, 'strs | str:',strs | str) c = SubSet(['a','b','c','d','e']) d = SubSet(['c','d','e','f']) e = SubSet(['e','f','a','b']) print('c:',c,'d:',d,'e:',e) print('c & d & e:',c.intersect(d,e), 'c | d | e:',c.union(d,e)) print('a+b:',a+b)
入出力結果(Terminal)
$ python sample.py a: [1, 2, 3, 4, 5] b: [4, 5, 6, 7, 8, 9, 10] a & b: [4, 5] a | b: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] strs: ['a', 'b', 'c', 'd', 'e'] index 1: b strs.__getitem__(1) b a b c d e str: defghij strs & str: ['d', 'e'] strs | str: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] c: ['a', 'b', 'c', 'd', 'e'] d: ['c', 'd', 'e', 'f'] e: ['e', 'f', 'a', 'b'] c & d & e: ['e'] c | d | e: ['a', 'b', 'c', 'd', 'e', 'f'] a+b: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] $
こんな感じかな。。
0 コメント:
コメントを投稿