Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Problemas con bucles
#1
Estimados, buenas tardes.
Estoy haciendo algunos ejercicios en la web, pero no tengo acceso a ningun recurso de consultas, asi que recurro al foro a ver si alguien me hecha una mano...
Sucede que para un numero n debo encontrar la potencia de 2 cuyo resultado se acerque (pero no supere) al numero n.
Es decir, si tengo n = 16, la maxima potencia de 2 seria 4 donde 2 elevado a la potencia 4 daria 16.
Para esto necesito un bucle, en mi caso use For, pero sucede que mi codigo recorre todo el bucle, pero no siempre me da el resultado deseado.
Copio y pego lo que he hecho a ver si alguien detecta el error.

def exponente(n):
    n= int(n)
    for i in range(n):
        print("para i = ",i)
        if i**2<=n:
            result=i
        else:
            i=i+1
    return(result)
print(exponente(16))


---****  ----   el resultado de los dos print es:  

para i =  0
para i =  1
para i =  2
para i =  3
para i =  4
para i =  5
para i =  6
para i =  7
para i =  8
para i =  9
para i =  10
para i =  11
para i =  12
para i =  13
para i =  14
para i =  15
3


Desde ya quedo muy agradecido!!!
Responder
#2
Hola, Alex.

Tu código lo veo bien. De hecho, al probar la función exponente(16) obtengo 4 como resultado, lo cual es correcto. Lo que se podría hacer es reemplazar el i=i+1 por un break, palabra reservada que interrumpe la ejecución de un bucle for o while:

  1. def exponente(n):
  2. n= int(n)
  3. for i in range(n):
  4. print("para i = ",i)
  5. if i**2<=n:
  6. result=i
  7. else:
  8. # Terminar el bucle.
  9. break
  10. return(result)
  11. print(exponente(16))


Además, el valor de la variable i es asignado automáticamente por Python, no es necesario sumarlo en cada iteración del bucle. También tené en cuenta que range(n) genera números desde 0 hasta n-1. Sobre la función range() podés chequear este recurso: https://micro.recursospython.com/recurso...range.html.

Saludos
Responder
#3
Francisco, como estas?
Primero que nada muchas gracias por tomarte la molestia en contestarme.
No sabia lo del "break", ya lo incorporé a mi cuaderno.
Sabes que aun sigo con problemas con esto, por ejemplo, aumente el numero n a 64, y la funcion me arroja como resultado potencia 8, cuando en realidad deberia ser 6.
Y para 128 me arroja 11 cuando deberia ser 7.
Sinceramente me esta ganando....
Responder
#4
Hola, Alex.

No había entendido que debía buscar la potencia de dos. En tu código estás buscando los números que elevados al cuadrados se acercan al argumento:

  1. if i**2 <= n:


Pero en realidad querés buscar los exponentes, de modo que debería ser:

  1. if 2**i <= n:


Saludos
Responder
#5
Hola Francisco.
No puedo creer que no haya visto ese error tan simple!!
Muchas gracias por tu tiempo.
Saludos!!
Responder


Salto de foro:


Usuarios navegando en este tema: 2 invitado(s)