Advertisement
maxim_shlyahtin

5.1(fixed)

Nov 8th, 2020
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.50 KB | None | 0 0
  1. from math import gcd
  2.  
  3.  
  4. class R:
  5.  
  6.     def __init__(self, m, n):
  7.         if n == 0:
  8.             raise ZeroDivisionError('Division by zero')
  9.         else:
  10.             self._num = m
  11.             self._den = n
  12.  
  13.     def __add__(self, other):
  14.         if not isinstance(other, R):
  15.             raise TypeError
  16.         else:
  17.             nok = (self._den * other._den) // gcd(self._den, other._den)
  18.             tmp = self._num * (nok // self._den) + other._num * (nok // other._den)
  19.             return R(tmp, nok)
  20.  
  21.     def __sub__(self, other):
  22.         if not isinstance(other, R):
  23.             raise TypeError
  24.         else:
  25.             nok = (self._den * other._den) // gcd(self._den, other._den)
  26.             tmp = self._num * (nok // self._den) - other._num * (nok // other._den)
  27.             return R(tmp, nok)
  28.  
  29.     def get_ten(self):
  30.         if self._den == 0:
  31.             raise ZeroDivisionError('Impossible')
  32.         else:
  33.             return f'{self._num / self._den}'
  34.  
  35.     def __lt__(self, other):
  36.         if not isinstance(other, R):
  37.             raise TypeError
  38.         else:
  39.             nok = (self._den * other._den) // gcd(self._den, other._den)
  40.             if self._num * (nok // self._den) < other._num * (nok // other._den):
  41.                 return R(self._num, self._den)
  42.  
  43.     def __gt__(self, other):
  44.         if not isinstance(other, R):
  45.             raise TypeError
  46.         else:
  47.             nok = (self._den * other._den) // gcd(self._den, other._den)
  48.             if self._num * (nok // self._den) > other._num * (nok // other._den):
  49.                 return R(self._num, self._den)
  50.  
  51.     def __str__(self):
  52.         return f'{self._num}/{self._den}'
  53.  
  54.  
  55. f, f1, f2, f3, f4, f5 = R(9, 2), R(3, 4), R(5, 6), R(6, 7), R(7, 1), R(4, 5)
  56. b = f + f1
  57. print(b)
  58.  
  59.  
  60. # print(f.get_ten())
  61.  
  62.  
  63. class SetR:
  64.  
  65.     def __init__(self, *args):
  66.         for i in range(len(args)):
  67.             if isinstance(args[i], R):
  68.                 self.list = list(args)
  69.             else:
  70.                 raise TypeError("Type isn't R")
  71.  
  72.     def get_max(self):
  73.         return max(self.list)
  74.  
  75.     def get_min(self):
  76.         return min(self.list)
  77.  
  78.     def get_count_max(self, item):
  79.         p = self.list[self.list.index(item) + 1:]
  80.         return len(p)
  81.  
  82.     def get_count_min(self, item):
  83.         g = self.list[:self.list.index(item)]
  84.         return len(g)
  85.  
  86.     def __getitem__(self, item):
  87.         return self.list[item]
  88.  
  89.     def __setitem__(self, key, value):
  90.         self.list[key] = value
  91.         return self.list
  92.  
  93.     def __len__(self):
  94.         return len(self.list)
  95.  
  96.     def __str__(self):
  97.         l = [f'{self.list[i]}' for i in range(len(self.list))]
  98.         return '[' + ', '.join(l) + ']'
  99.  
  100.  
  101. s = SetR(f, f1, f3, f2, f5, f4)
  102. d = SetR(f1, f2, f3)
  103. print(max(s))
  104.  
  105.  
  106. class Polynomial:
  107.  
  108.     def __init__(self, x):
  109.         if isinstance(x, SetR):
  110.             self.x = x
  111.         else:
  112.             raise TypeError("Type isn't SetR")
  113.  
  114.     def __add__(self, other):
  115.         storage = []
  116.         if len(self.x) > len(other.x):
  117.             copy = self.x
  118.         else:
  119.             copy = other.x
  120.         for i in range(-min(len(self.x), len(other.x)), 0):
  121.             storage.append(self.x[i] + other.x[i])
  122.         for i in range(-len(storage), 0):
  123.             copy[i] = storage[i]
  124.         return Polynomial(copy)
  125.  
  126.     def __str__(self):
  127.         l = [f'({self.x[i]} * x**{len(self.x) - i})' for i in range(len(self.x))]
  128.         return ' + '.join(l)
  129.  
  130.  
  131. x = Polynomial(s)
  132. y = Polynomial(d)
  133. print(x + y)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement