Прикреплённый файл «arbuz2.py»
Загрузка 1 #!/usr/bin/python
2 # coding: utf-8
3 '''
4 Реализовать собственные классы: арбуз и авоська. Реализовать операции
5
6 * арбуз + арбуз = авоська
7 * авоська + арбуз = авоська
8 * арбуз + авоська = авоська
9 * авоська + авоська = авоська
10 * авоська - арбуз = авоська
11 * достать арбуз из авоськи (arbuz = avoska.pop())
12 * просмотр арбузов в авоське (for arbuz in avoska:), без доставания их из авоськи
13 '''
14
15 class IDer():
16 def __init__(self):
17 self.__IDs=set([0])
18 def Free(self):
19 return min(set(xrange(min(self.__IDs),max(self.__IDs)+2))-self.__IDs)
20 def Register(self):
21 id=self.Free()
22 self.__IDs.add(id)
23 return id
24 def Unregister(self, id):
25 self.__IDs-=set([id])
26
27 class avoska():
28 __ID=IDer()
29 def __init__(self, *argp):
30 self.ID=self.__ID.Register()
31 if len(argp)==1:
32 if hasattr(argp[0],"__iter__"):
33 self.arbuzy=set(argp[0])
34 else:
35 self.arbuzy=set([argp[0]])
36 else:
37 self.arbuzy=set(argp)
38 def __del__(self):
39 self.__ID.Unregister(self.ID)
40 def __add__(self, arg):
41 if hasattr(arg,"__iter__"):
42 return avoska(self.arbuzy|set(arg))
43 else:
44 return avoska(self.arbuzy|set([arg]))
45 def __radd__(self, arg):
46 return self+arg
47 def __sub__(self, arg):
48 new=self.arbuzy-set([arg])
49 return avoska(new)
50 def pop(self):
51 return self.arbuzy.pop()
52 def __iter__(self):
53 for a in self.arbuzy: yield a
54 def __repr__(self):
55 return "Avoska-{0} {1}".format(self.ID,self.arbuzy)
56
57 class arbuz():
58 __ID=IDer()
59 def __init__(self):
60 self.ID=self.__ID.Register()
61 def __del__(self):
62 self.__ID.Unregister(self.ID)
63 def __add__(self, arg):
64 return avoska(self, arg)
65 def __repr__(self):
66 return "Arbuz-{0}".format(self.ID)
67
68
69 a,b,c,d=arbuz(),arbuz(),arbuz(),arbuz()
70
71 S=a+b
72 T=c+d
73 print S
74 print S+a
75 print T
76 print T-d
77 print S+T
78 print S+T
79 try:
80 print S-d
81 except ValueError as message:
82 print "{0}-{1} error: {2}".format(S,d,message)
83 print T.pop(),"/",T
84 print T.pop(),"/",T
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2011-09-26 11:35:38, 2.8 KB) [[attachment:Sav_arbuz_ch.py]]
- [получить | показать] (2011-09-26 11:35:38, 2.3 KB) [[attachment:arbuz2.py]]
- [получить | показать] (2011-09-26 11:35:38, 3.0 KB) [[attachment:ocalc.py]]
Вам нельзя прикреплять файлы к этой странице.