rational class
This commit is contained in:
parent
48216d09b7
commit
bb4ffda4e9
150
python-temel/rational.class.py
Normal file
150
python-temel/rational.class.py
Normal file
|
@ -0,0 +1,150 @@
|
|||
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')
|
147
python-temel/rational.class.py~
Normal file
147
python-temel/rational.class.py~
Normal file
|
@ -0,0 +1,147 @@
|
|||
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'
|
||||
|
||||
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')
|
Loading…
Reference in New Issue
Block a user