[Python][Ejercicio (por y para novatos)] Función para elevar potencia

Iniciado por kerith, 1 Enero 2011, 21:51 PM

0 Miembros y 1 Visitante están viendo este tema.

kerith

Buenas, he estado trasteando un poco con Python y me han entrado ganas de ver si era capaz de programar otra vez un algoritmo que tenía para elevar un número a una de sus potencias (es totalmente inútil, lo sé, pero es un reto al fin y al cabo).

El caso es que me gustaría proponeros un reto muy sencillo:
Código (python) [Seleccionar]
import sys

def main():
    numero = int(raw_input('Numero: '))
    potencia = int(raw_input('Potencia: '))
# A partir de aqui es prescindible
    resultado = ElevarPotencia(numero, potencia)
    print resultado
# Hasta aqui ^

if __name__ == '__main__':
    main()


A partir de esto, programad la función ElevarPotencia que, como su propio nombre indica, tiene que elevar el número 'numero' a la potencia 'potencia' (a mi me han salido 10 líneas, contando la de 'def' y la de 'return').

Este es un ejercicio hecho por y para novatos, así que absténganse los 'Está tirado' y comentarios por el estilo, por favor


Solo me arrepiento de no vivir lo suficiente para saciar mi curiosidad.

xassiz~

Bueno, aquí mi versión:
Código (python) [Seleccionar]
def ElevarPotencia(numero, exponente):
resultado = numero
for x in range(exponente-1): resultado*=numero
return resultado

kerith

Tu solución tiene un fallo:

Si el exponente es 0, el resultado es 1 siempre, y en tu script no ce cumple.
Aún así, creo que con un 'if' para controlar lo del exponente lo solucionarías, y que es es una solución muy elegante y comprimida.

salu2, kerith

Solo me arrepiento de no vivir lo suficiente para saciar mi curiosidad.

xassiz~

Código (python) [Seleccionar]
def ElevarPotencia(numero, exponente):
        if exponente == 0: return 1
resultado = numero
for x in range(exponente-1): resultado*=numero
return resultado
;D

.:WindHack:.

Código (python) [Seleccionar]
def pPow(bBase,eExp):
if eExp <= 0:
return 1
else:
return bBase * pPow(bBase,eExp-1)

Follow me on Twitter: @windhack | Visit my website: www.daw-labs.com

"The only thing they can't take from us are our minds."

kerith

Yo creía que no se podía hacer en menos líneas que pablomi, pero veo que si.

.:WindHack:., tu solución (supongo que lo sabías) se peude comprimir en 3 líneas:
Código (python) [Seleccionar]
def pPow(bBase,eExp):
if eExp <= 0:return 1
return bBase * pPow(bBase,eExp-1)


Serías tan amable de explicármelo? Sé que funciona, pero soy un poco noob y no termino de entenderlo.

Me gustan mucho las dos soluciones, luego pondré la mía, pero me da un poco de vergüenza, ocupa 10 líneas.

Cuanto me queda por aprender...

salu2, kerith

Solo me arrepiento de no vivir lo suficiente para saciar mi curiosidad.


kerith

Citarkerith, eso se llama función recursiva.
Gracias, pablomi.

Bueno, aquí va mi código. Utiliza un contador y un bucle while, pero esque no conocía la función range().

Código (python) [Seleccionar]
def ElevarPotencia(numero, exponente):
   num_base = numero
   contador = 0
   if exponente != 0:
       while contador < exponente:
           numero *= num_base
           contador +=  1
   else:
       numero = 1
   return numero

La verdad es que he aprendido mucho con este post.

Gracias a los dos.

salu2, kerith

Solo me arrepiento de no vivir lo suficiente para saciar mi curiosidad.