Прикреплённый файл «vector.py»

Загрузка

   1 #!/usr/bin/env python3
   2 '''
   3 Класс «vector» на скорую руку
   4 
   5     сложение векторов и с числом
   6         выяснить тип операнда 
   7     умножение на вектор и на число
   8 
   9         в т. ч. __rmul__ 
  10 
  11     Не забыть делать именно вектор, type(self)(...)
  12 '''
  13 
  14 class vector:
  15     '''Класс «вектор», поддерживающий
  16     - индексацию (⇒ итерирование)
  17     - поэлементное сложение и умножение с последовательностью
  18     - сложение и умножение с числом'''
  19     def __init__(self, seq=[]):
  20         '''seq — произвольная последовательность'''
  21         self.seq = list(seq)
  22 
  23     def __len__(self):
  24         return len(self.seq)
  25 
  26     def __getitem__(self, n):
  27         return self.seq[n]
  28 
  29     def __op(self, other, fun):
  30         '''Вычисление функции fun
  31         - над всеми элементами self и other попарно, если other итерируемо;
  32         - или же над всеми элементами self и значением other'''
  33         if hasattr(other,"__getitem__"):
  34             # type(self)(последовательность) конструирует экземпляр текущего класса
  35             return type(self)(fun(a,b) for a,b in zip(self, other))
  36         else:
  37             return type(self)(fun(a,other) for a in self)
  38 
  39     def __add__(self, other):
  40         return self.__op(other, type(self.seq[0]).__add__)
  41 
  42     def __radd__(self, other):
  43         return self.__add__(other)
  44 
  45     def __mul__(self, other):
  46         return self.__op(other, type(self.seq[0]).__mul__)
  47 
  48     def __rmul__(self, other):
  49         return self.__mul__(other)
  50 
  51     def __str__(self):
  52         return "<"+",".join(str(s) for s in self)+">"
  53 
  54 a = vector((1,2,3,4,5,6))
  55 
  56 print(a,"+",1,"=",a+1)
  57 print(1,"+",a,"=",1+a)
  58 print(a,"+",a,"=",a+a)
  59 l = 3,2,3,2,3,2
  60 print(a,"+",l,"=",a+l)
  61 
  62 print(a,"*",2,"=",a*2)
  63 print(2,"*",a,"=",2*a)
  64 print(a,"*",a,"=",a*a)
  65 l = 3,2,3,2,3,2
  66 print(a,"*",l,"=",a*l)

Прикреплённые файлы

Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.

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