Прикреплённый файл «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 из ссылки «[получить]», так как он чисто внутренний и может измениться.

Вам нельзя прикреплять файлы к этой странице.