Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: kerith en 1 Enero 2011, 21:51 pm



Título: [Python][Ejercicio (por y para novatos)] Función para elevar potencia
Publicado por: kerith en 1 Enero 2011, 21:51 pm
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
  1. import sys
  2.  
  3. def main():
  4.    numero = int(raw_input('Numero: '))
  5.    potencia = int(raw_input('Potencia: '))
  6. # A partir de aqui es prescindible
  7.    resultado = ElevarPotencia(numero, potencia)
  8.    print resultado
  9. # Hasta aqui ^
  10.  
  11. if __name__ == '__main__':
  12.    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



Título: Re: [Python][Ejercicio (por y para novatos)] Función para elevar potencia
Publicado por: xassiz~ en 1 Enero 2011, 22:26 pm
Bueno, aquí mi versión:
Código
  1. def ElevarPotencia(numero, exponente):
  2. resultado = numero
  3. for x in range(exponente-1): resultado*=numero
  4. return resultado


Título: Re: [Python][Ejercicio (por y para novatos)] Función para elevar potencia
Publicado por: kerith en 1 Enero 2011, 23:10 pm
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


Título: Re: [Python][Ejercicio (por y para novatos)] Función para elevar potencia
Publicado por: xassiz~ en 1 Enero 2011, 23:19 pm
Código
  1. def ElevarPotencia(numero, exponente):
  2.        if exponente == 0: return 1
  3. resultado = numero
  4. for x in range(exponente-1): resultado*=numero
  5. return resultado
;D


Título: Re: [Python][Ejercicio (por y para novatos)] Función para elevar potencia
Publicado por: .:WindHack:. en 2 Enero 2011, 02:07 am
Código
  1. def pPow(bBase,eExp):
  2. if eExp <= 0:
  3. return 1
  4. else:
  5. return bBase * pPow(bBase,eExp-1)


Título: Re: [Python][Ejercicio (por y para novatos)] Función para elevar potencia
Publicado por: kerith en 2 Enero 2011, 13:15 pm
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
  1. def pPow(bBase,eExp):
  2. if eExp <= 0:return 1
  3. 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


Título: Re: [Python][Ejercicio (por y para novatos)] Función para elevar potencia
Publicado por: xassiz~ en 2 Enero 2011, 13:17 pm
Buena esa Windhack ^^

kerith, eso se llama función recursiva (http://es.wikipedia.org/wiki/Algoritmo_recursivo).


Título: Re: [Python][Ejercicio (por y para novatos)] Función para elevar potencia
Publicado por: kerith en 2 Enero 2011, 14:10 pm
Citar
kerith, 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
  1. def ElevarPotencia(numero, exponente):
  2.    num_base = numero
  3.    contador = 0
  4.    if exponente != 0:
  5.        while contador < exponente:
  6.            numero *= num_base
  7.            contador +=  1
  8.    else:
  9.        numero = 1
  10.    return numero
La verdad es que he aprendido mucho con este post.

Gracias a los dos.

salu2, kerith