Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class rational:
- def __init__(self,num,den):
- if num<0 and den< 0:
- self.num,self.den= -num,-den
- else:
- self.num,self.den= num,den
- def cut (self):
- n,m=self.num,self.den
- f,d=n,m
- while m!= 0:
- n,m=m,n%m
- return rational(f/n,d/n)
- def __str__(self):
- return "{}/{}".format(self.num,self.den)
- def __add__(self,other_obj):
- if isinstance(other_obj,rational):
- return rational(self.num*other_obj.den+
- other_obj.num*self.den,
- self.den*other_obj.den).cut()
- elif isinstance(other_obj,int):
- return rational(self.num+other_obj*self.den,
- self.den).cut()
- def __radd__(self,other_obj):
- return self+other_obj
- def __neg__(self):
- return rational(-self.num,self.den)
- def __sub__(self,other_obj):
- return self+(-other_obj)
- def __rsub__(self,other_obj):
- return self-other_obj
- def __mul__(self,other_obj):
- if isinstance(other_obj,rational):
- return rational(self.num*other_obj.num,
- self.den*other_obj.den).cut()
- elif isinstance(other_obj,int):
- return rational(other_obj*self.num,
- self.den).cut()
- def __rmul__ (self,other_obj):
- return self*other_obj
- def __div__(self,other_obj):
- if isinstance(other_obj,rational):
- return rational(self.num*other_obj.den,
- self.den*other_obj.num).cut()
- elif isinstance(other_obj,int):
- return rational(self.num, other_obj*self.den).cut()
- def __rdiv__(self,other_obj):
- return self/other_obj
- def __pow__(self,degree):
- if degree == 0:
- return 1
- else:
- return rational(self.num**degree,self.den**degree).cut()
- class simple(rational):
- def __init__(self,num):
- rational.__init__(self,num,1)
- def __str__(self):
- return "{}".format(self.num)
- def gcd(self,other_obj):
- if isinstance(other_obj,int):
- n,m=self.num,other_obj
- while m !=0:
- n,m=m,n%m
- return n
- elif isinstance(other_obj,simple):
- n,m=self.num,other_obj.num
- while m !=0:
- n,m=m,n%m
- return n
- else:
- print("Error")
- def __add__(self,o):
- return (rational.__add__(self,o)).num
- def __radd__(self,o):
- return (rational.__radd__(self,o)).num
- def __neg__(self,o):
- return (rational.__neg__(self,o)).num
- def __sub__(self,o):
- return (rational.__sub__(self,o)).num
- def __rsub__(self,o):
- return (rational.__rsub__(self,o)).num
- def __mul__(self,o):
- return (rational.__mul__(self,o)).num
- def __rmul__(self,o):
- return (rational.__rmul__(self,o)).num
- def __div__(self,o):
- return (rational.__div__(self,o)).num
- def __rdiv__(self,o):
- return (rational.__rdiv__(self,o)).num
- def __pow__(self,o):
- if o == 0:
- return 1
- elif o < 0:
- return rational.__pow__(self,o)
- else:
- return self.num**o
Add Comment
Please, Sign In to add comment