I realize how complicated I made it!

If exponent is negative, this version takes abs(exponent) and iteratively
divides result by base.
def power(base, exponent):
    """ Returns base**exponent. """
    if exponent == 0:
        return 1
    elif exponent < 0:
        result = 1
        for _ in range(abs(exponent)):
            result /= base
        return result
    else:
        result = 1
        for _ in range(exponent):
            result *= base
        return result

If exponent is negative, this version resets base to its reciprocal and
exponent to abs(exponent).
def power(base, exponent):
    """ Returns base**exponent. """
    if exponent == 0:
        return 1
    elif exponent < 0:
        base = 1 / base
        exponent = abs(exponent)
        result = 1
        for _ in range(exponent):
            result *= base
        return result
    else:
        result = 1
        for _ in range(exponent):
            result *= base
        return result

This version deals with both negative and non-negative exponents in a
single loop. I like this.
def power(base, exponent):
    """ Returns base**exponent. """
    if exponent == 0:
        return 1
    else:
        result = 1
        for _ in range(abs(exponent)):
            result *= base
        if exponent < 0:
            return 1 / result
        else:
            return result

I'm learning a lot. Thank you for being so helpful.


On Sun, Mar 5, 2017 at 11:33 PM, Alex Kleider <aklei...@sonic.net> wrote:

> On 2017-03-05 02:24, Peter Otten wrote:
>
>> Sri Kavi wrote:
>>
>> Like I just said in my other message, I was trying to reply to Tasha
>>> Burman, but I was in digest mode and I didn't know how to change my
>>> subscription options in order to reply to individual messages. I also
>>> don't know if it's an assignment, but I'm a beginner learning to program,
>>> too :)
>>>
>>> What if any of the following are true, and what should be done in each
>>>>
>>> case?
>>>
>>>>   if exponent ==1: .....
>>>>
>>>
> New discovery:
> This (if exponent ==1) 'special case' ceases to be special if result is
> set to 1 rather than to base. It also simplifies the parameters to the
> range function: range(exponent) rather than range(1, exponent).
>
>   if exponent = 0: .....
>>>>   if exponent < 0: .....
>>>>
>>>
> If the exponent is negative, one need only reset the base to its
> reciprocal and the the exponent to its absolute value after which the same
> algorithm does the job.
> Alternatively you could simply change the exponent to its absolute value
> and set a flag and at the end change res to its reciprocal if your flag is
> set- again avoiding having two separate loops.
>
>
>>> Here's my implementation.
>>>
>>
>> In Python 3.6.0
>>>
>>> def power(base, exponent):
>>>     if exponent == 0:
>>>         return 1
>>>     elif exponent > 0:
>>>         result = base
>>>
>>>         for _ in range(1, exponent):
>>>             result *= base
>>>
>>>         return result
>>>     else:
>>>         exponent = -exponent
>>>         result = base
>>>
>>>         for _ in range(1, exponent):
>>>             result *= base
>>>         return 1 / result
>>>
>>> Please share your thoughts.
>>>
>>
>> You can try to simplify that a bit:
>>
>> - Handle the case with non-negative exponents in one branch
>> - Avoid duplicating the for loop for negative exponents, e. g. by calling
>>   power() from within power()
>>
> _______________________________________________
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to