add overload ^ and ** for fractions
This commit is contained in:
parent
5cba9763e4
commit
eabe3e9a8e
@ -247,6 +247,48 @@ class Fraction(object):
|
|||||||
|
|
||||||
return number / self
|
return number / self
|
||||||
|
|
||||||
|
def __pow__(self, power):
|
||||||
|
""" overload **
|
||||||
|
|
||||||
|
>>> f = Fraction(3, 4)
|
||||||
|
>>> f**0
|
||||||
|
[1]
|
||||||
|
>>> f**1
|
||||||
|
[< Fraction 3 / 4>]
|
||||||
|
>>> f**3
|
||||||
|
[[3, 3, '^', 4, 3, '^', '/'], < Fraction 27 / 64>]
|
||||||
|
>>> f = Fraction(6, 4)
|
||||||
|
>>> f**3
|
||||||
|
[[6, 3, '^', 4, 3, '^', '/'], < Fraction 216 / 64>, [27, 8, '*', 8, 8, '*', '/'], < Fraction 27 / 8>]
|
||||||
|
|
||||||
|
"""
|
||||||
|
if not type(power) == int:
|
||||||
|
raise ValueError("Can't raise fraction to power {}".format(str(power)))
|
||||||
|
|
||||||
|
if power == 0:
|
||||||
|
return [1]
|
||||||
|
elif power == 1:
|
||||||
|
return [self]
|
||||||
|
else:
|
||||||
|
steps = [[self._num, power, op.pw, self._denom, power, op.pw, op.div]]
|
||||||
|
ans_frac = Fraction(self._num ** power, self._denom ** power)
|
||||||
|
steps.append(ans_frac)
|
||||||
|
steps += ans_frac.simplify()
|
||||||
|
return steps
|
||||||
|
|
||||||
|
def __xor__(self, power):
|
||||||
|
""" overload ^
|
||||||
|
|
||||||
|
>>> f = Fraction(3, 4)
|
||||||
|
>>> f^3
|
||||||
|
[[3, 3, '^', 4, 3, '^', '/'], < Fraction 27 / 64>]
|
||||||
|
>>> f = Fraction(6, 4)
|
||||||
|
>>> f^3
|
||||||
|
[[6, 3, '^', 4, 3, '^', '/'], < Fraction 216 / 64>, [27, 8, '*', 8, 8, '*', '/'], < Fraction 27 / 8>]
|
||||||
|
"""
|
||||||
|
|
||||||
|
return self.__pow__(power)
|
||||||
|
|
||||||
def __abs__(self):
|
def __abs__(self):
|
||||||
return Fraction(abs(self._num), abs(self._denom))
|
return Fraction(abs(self._num), abs(self._denom))
|
||||||
|
|
||||||
@ -278,69 +320,72 @@ class Fraction(object):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
f = Fraction(1, 12)
|
#f = Fraction(1, 12)
|
||||||
g = Fraction(1, 12)
|
#g = Fraction(1, 12)
|
||||||
h = Fraction(1,-5)
|
#h = Fraction(1,-5)
|
||||||
t = Fraction(10,3)
|
#t = Fraction(10,3)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print("1 + ", str(h))
|
#print("1 + ", str(h))
|
||||||
for i in (1 + h):
|
#for i in (1 + h):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(f) , "+", str(t))
|
#print(str(f) , "+", str(t))
|
||||||
for i in (f + t):
|
#for i in (f + t):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(f) , "+", str(g))
|
#print(str(f) , "+", str(g))
|
||||||
for i in (f + g):
|
#for i in (f + g):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(f) , "-", str(g))
|
#print(str(f) , "-", str(g))
|
||||||
for i in (f - g):
|
#for i in (f - g):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(f) , "*", str(g))
|
#print(str(f) , "*", str(g))
|
||||||
for i in (f * g):
|
#for i in (f * g):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(h) , "+", str(t))
|
#print(str(h) , "+", str(t))
|
||||||
for i in (h + t):
|
#for i in (h + t):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(h) , "-", str(t))
|
#print(str(h) , "-", str(t))
|
||||||
for i in (h - t):
|
#for i in (h - t):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(h) , "*", str(t))
|
#print(str(h) , "*", str(t))
|
||||||
for i in (h * t):
|
#for i in (h * t):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print("-", str(h) )
|
#print("-", str(h) )
|
||||||
for i in (-h):
|
#for i in (-h):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(h) , "/", str(t))
|
#print(str(h) , "/", str(t))
|
||||||
for i in (h / t):
|
#for i in (h / t):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(h) , "+", str(0))
|
#print(str(h) , "+", str(0))
|
||||||
for i in (h + 0):
|
#for i in (h + 0):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(h) , "*", str(1))
|
#print(str(h) , "*", str(1))
|
||||||
for i in (h * 1):
|
#for i in (h * 1):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(h) , "*", str(0))
|
#print(str(h) , "*", str(0))
|
||||||
for i in (h * 0):
|
#for i in (h * 0):
|
||||||
print(i)
|
# print(i)
|
||||||
print("---------")
|
#print("---------")
|
||||||
print(str(h) , "*", str(4))
|
#print(str(h) , "*", str(4))
|
||||||
for i in (h * 4):
|
#for i in (h * 4):
|
||||||
print(i)
|
# print(i)
|
||||||
|
|
||||||
#print(f.simplify())
|
#print(f.simplify())
|
||||||
|
|
||||||
|
import doctest
|
||||||
|
doctest.testmod()
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
# Reglages pour 'vim'
|
# Reglages pour 'vim'
|
||||||
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
|
# vim:set autoindent expandtab tabstop=4 shiftwidth=4:
|
||||||
|
Loading…
Reference in New Issue
Block a user