Guest User

Untitled

a guest
Dec 10th, 2018
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. class rational:
  2. def __init__(self,num,den):
  3. if num<0 and den< 0:
  4. self.num,self.den= -num,-den
  5. else:
  6. self.num,self.den= num,den
  7. def cut (self):
  8. n,m=self.num,self.den
  9. f,d=n,m
  10. while m!= 0:
  11. n,m=m,n%m
  12. return rational(f/n,d/n)
  13. def __str__(self):
  14. return "{}/{}".format(self.num,self.den)
  15. def __add__(self,other_obj):
  16. if isinstance(other_obj,rational):
  17. return rational(self.num*other_obj.den+
  18. other_obj.num*self.den,
  19. self.den*other_obj.den).cut()
  20. elif isinstance(other_obj,int):
  21. return rational(self.num+other_obj*self.den,
  22. self.den).cut()
  23. def __radd__(self,other_obj):
  24. return self+other_obj
  25. def __neg__(self):
  26. return rational(-self.num,self.den)
  27. def __sub__(self,other_obj):
  28. return self+(-other_obj)
  29. def __rsub__(self,other_obj):
  30. return self-other_obj
  31. def __mul__(self,other_obj):
  32. if isinstance(other_obj,rational):
  33. return rational(self.num*other_obj.num,
  34. self.den*other_obj.den).cut()
  35. elif isinstance(other_obj,int):
  36. return rational(other_obj*self.num,
  37. self.den).cut()
  38. def __rmul__ (self,other_obj):
  39. return self*other_obj
  40. def __div__(self,other_obj):
  41. if isinstance(other_obj,rational):
  42. return rational(self.num*other_obj.den,
  43. self.den*other_obj.num).cut()
  44. elif isinstance(other_obj,int):
  45. return rational(self.num, other_obj*self.den).cut()
  46. def __rdiv__(self,other_obj):
  47. return self/other_obj
  48. def __pow__(self,degree):
  49. if degree == 0:
  50. return 1
  51. else:
  52. return rational(self.num**degree,self.den**degree).cut()
  53. class simple(rational):
  54. def __init__(self,num):
  55. rational.__init__(self,num,1)
  56. def __str__(self):
  57. return "{}".format(self.num)
  58. def gcd(self,other_obj):
  59. if isinstance(other_obj,int):
  60. n,m=self.num,other_obj
  61. while m !=0:
  62. n,m=m,n%m
  63. return n
  64. elif isinstance(other_obj,simple):
  65. n,m=self.num,other_obj.num
  66. while m !=0:
  67. n,m=m,n%m
  68. return n
  69. else:
  70. print("Error")
  71. def __add__(self,o):
  72. return (rational.__add__(self,o)).num
  73. def __radd__(self,o):
  74. return (rational.__radd__(self,o)).num
  75. def __neg__(self,o):
  76. return (rational.__neg__(self,o)).num
  77. def __sub__(self,o):
  78. return (rational.__sub__(self,o)).num
  79. def __rsub__(self,o):
  80. return (rational.__rsub__(self,o)).num
  81. def __mul__(self,o):
  82. return (rational.__mul__(self,o)).num
  83. def __rmul__(self,o):
  84. return (rational.__rmul__(self,o)).num
  85. def __div__(self,o):
  86. return (rational.__div__(self,o)).num
  87. def __rdiv__(self,o):
  88. return (rational.__rdiv__(self,o)).num
  89. def __pow__(self,o):
  90. if o == 0:
  91. return 1
  92. elif o < 0:
  93. return rational.__pow__(self,o)
  94. else:
  95. return self.num**o
Add Comment
Please, Sign In to add comment