python-CSD-kursu/python-temel/rational.class.py
2023-07-30 17:30:06 +03:00

151 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import math
class Rational:
def __init__(self, a=0, b=1):
if not isinstance(a, int) or not isinstance(b, int):
raise TypeError('numerator and denominator must be int!')
if b == 0:
raise ValueError('denominator must not be 0!')
self.a = a
self.b = b
self._simplify()
def __repr__(self):
if self.b == 1:
return str(self.a)
if self.a == 0:
return '0'
return f'{self.a}/{self.b}'
def _simplify(self):
gcd = math.gcd(self.a, self.b)
self.a //= gcd
self.b //= gcd
def __add__(self, r):
if isinstance(r, int):
a = r * self.b + self.a
b = self.b
else:
a = self.a * r.b + self.b * r.a
b = self.b * r.b
return Rational(a, b)
__radd__ = __add__
def __sub__(self, r):
if isinstance(r, int):
a = r * self.b - self.a
b = self.b
else:
a = self.a * r.b - self.b * r.a
b = self.b * r.b
return Ratioanal(a, b)
__rsub__ = __sub__
def __mul__(self, r):
if isinstance(r, int):
a = self.a * r
b = self.b
else:
a = self.a * r.a
b = self.b * r.b
return Rational(a, b)
__rmul__ = __mul__
def __truediv__(self, r):
if isinstance(r, int):
a = self.a
b = self.b * r
else:
a = self.a * r.b
b = self.b * r.a
return Rational(a, b)
__rtruediv__ = __truediv__
def __lt__(self, r):
if isinstance(r, int):
return self.a / self.b < r
return self.a / self.b < r.a / r.b
def __le__(self, r):
if isinstance(r, int):
return self.a / self.b <= r
return self.a / self.b <= r.a / r.b
def __gt__(self, r):
if isinstance(r, int):
return self.a / self.b > r
return self.a / self.b > r.a / r.b
def __ge__(self, r):
if isinstance(r, int):
return self.a / self.b >= r
return self.a / self.b >= r.a / r.b
def __eq__(self, r):
if isinstance(r, int):
return self.a / self.b == r
return self.a / self.b == r.a / r.b
def __ne__(self, r):
if isinstance(r, int):
return self.a / self.b != r
return self.a / self.b >= r.a != r.b
def __float__(self):
return self.a / self.b
def __int__(self):
return self.a // self.b
def __bool__(self):
return self.a != 0
x = Rational(3, 2)
y = Rational(1, 2)
result = x + y * x
print(result)
result = x / 2
print(result)
result = float(x)
print(result)
result = int(x)
print(result)
z = Rational()
if z:
print('Doğru')
else:
print('Yanlış')
if x > y:
print('x > y')
elif x < y:
print('x < y')
elif x == y:
print('x == y')