On 2017-03-05 01:42, Sri Kavi wrote:
I’ve improved it a bit to meet the following conditions:
1. type(base) == int and exponent == 0
2. base == 0 < exponent
3. (base > 0 or base < 0) and exponent > 0
4. base > 0 > exponent
5. base < 0 > exponent
6. base == 0 > exponent
def power(base, exponent):
if type(base) == int and exponent == 0:
return 1
elif base == 0 < exponent:
return 0
elif (base > 0 or base < 0) and exponent > 0:
result = base
for _ in range(1, exponent):
result *= base
return result
elif base > 0 > exponent:
exponent = -(exponent)
result = base
for _ in range(1, exponent):
result *= base
return 1 / result
elif base < 0 > exponent:
exponent = -exponent
result = base
for _ in range(1, exponent):
result *= base
return 1 / result
elif base == 0 > exponent:
print('0 cannot be raised to a negative power.')
#Testing first condition
print(power(0, 0))
print(power(-1, 0))
print(power(1, 0))
#Testing second condition
print(power(0, 3))
#Testing third condition
print(power(2, 3))
print(power(-2, 3))
#Testing fourth condition
print(power(2, -3))
#Testing fifth condition
print(power(-2, -3))
#Testing sixth condition
print(power(0, -3))
I don’t know if it’s anywhere near built-in pow() function, but your
reply
made me think about all those conditions and try to see if I can make
my
previous function code a little better. I need your feedback please.
Sri
You've made your code much more complicated than it need be. Also, what
I suggested before can be simplified considerably.
The fundamental algorithm is:
result = 1
for _ in range(exponent):
result = result * base
The problem arises if the exponent is 0 or negative, so you only need
test for 2 special cases and take appropriate action. You've already
dealt with the first:
if exponent == 0:
return 1
There are two ways of dealing with the other- both mentioned in (a)
previous post(s).
Keep at it!
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor