Aprovecha el precio especial

Antes:$249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comienza ahora

Termina en:

01h

28m

39s

0

Como usar correctamente un bucle while en python sin matar tu programa en el proceso

Como programadores tenemos el objetivo de crear procesos simples pero funcionales, que no se rompan al momento de usarlos o que no provoquen que los teléfonos de nuestros usuarios se apaguen por usar nuestra aplicación.

Y uno de los muchos problemas que pueden causar esto es el mal uso de bucles dentro de nuestro código, por eso (y porque es parte de una tarea en el curso de fundamentos de Python en platzi) hoy aprenderemos como usar correctamente el bucle while sin matar nuestro programa en el proceso.

Primero repasemos que es un bucle while (si ya sabes que es un bucle while solo míralo directamente)

Que es un bucle (while) ?

Imagina que tienes un algoritmo el cual inicializa una variable en 0 y necesitas incrementar esa variable en pasos de 1 en 1 hasta que esa variable tenga como valor el numero 10, si escribiéramos ese algoritmo en Python se miraría así.

numero = 0
numero += 1
numero += 1
numero += 1
numero += 1
numero += 1
numero += 1
numero += 1
numero += 1
numero += 1
numero += 1

Ahora agreguemos un print en cada incremento para ver el valor de la variable, nuestro codigo queda así.

numero = 0
numero += 1print(numero)
numero += 1print(numero)
numero += 1print(numero)
numero += 1print(numero)
numero += 1print(numero)
numero += 1print(numero)
numero += 1print(numero)
numero += 1print(numero)
numero += 1print(numero)
numero += 1print(numero)

Pero cuando programamos sistemas reales no podemos permitirnos copiar y pegar líneas de código para que se repita una determinada acción, para eso usamos los bucles.

Los bucles nos permiten repetir una serie de acciones (algoritmo), un bucle es repetir algo, aplicando el concepto de bucle existe una keyword (palabra reservada) en Python llamada while (while solo es un tipo de bucle).

Usando el bucle while en nuestro código anterior este pasa a verse así.

numero = 0while numero < 10:
	numero += 1print(numero)

El bucle while va a repetir el algoritmo dentro de el hasta que la condición se deje de cumplir, este es un funcionamiento similar a un condicional if ,pero con while una vez terminado el algoritmo se vuelve a evaluar la condición para saber si se vuelve a ejecutar el código dentro del bucle o no.

El funcionamiento del algoritmo anterior es el siguiente…

  1. Se declara e inicializa la variable numero con el valor de 0.
  2. Se declara el bucle while con la condición de que numero sea inferior a 10
  3. Se ejecuta el algoritmo del bucle while (incrementar y mostrar la variable numero)
  4. Se repite el bucle hasta que la condición se deje de cumplir.

Pasos para usar correctamente el bucle while

Antes que todo analicen este código.

contraseña_admin = "123"
contraseña_ingresada = input(":")
whileTrue:
	ifnot contraseña_ingresada == contraseña_admin:
		print("Esa no es la contraseña del administrador >:(")
		nueva_contraseña_solicitada = input(":")
	else:
		print("Bienvenido administrador !")
		breakprint("Entraste en el sistema !")

Pasó 1: Tener una condición de bucle clara

La condición para que tu bucle siga iterando debe de estar siempre en el lugar que le corresponde a la condición del bucle, en nuestro código anterior pusimos directamente un True en el lugar de la condición y esto es algo que se debe de evitar en la medida de lo posible ya que aunque pueda funcionar creeme sera mas difícil en un futuro leer y sabe cual es el objetivo del bucle, si tu vez este código…

whileTrue:

no sabes para que se usa el bucle, solo sabes que es un bucle, pero si vez este código…

whilenot contraseña_ingresada == contraseña_admin:

sabes a la perfección que el bucle es para validar que la contraseña que se le esta solicitando al usuario sea la misma contraseña del administrador para así dejarlo entrar al sistema.

Pero este sigue siendo un bucle infinito, aunque en algún momento se ingrese la contraseña correcta nunca podrá ingresar el usuario al sistema y si ya te diste cuenta del porque, felicidades ya dominas el siguiente paso.

Paso 2: El o los datos de la condición tiene que ser mutable

Ahora, tiene que ser mutable, a que me refiero con esto? pues esto quiere decir que los datos de la condición tienen que poder cambiar dentro del algoritmo del bucle ya que de esta manera la condición del bucle puede ser True o False, si la condición sigue siendo True por siempre el bucle continuara repitiéndose una y otra vez y así obtienes un bucle infinito, el perfecto algoritmo para que tu aplicación deje de funcionar ya que nunca va a volver a avanzar. Esto no aplica siempre, hay casos en los cuales puedes usar bucles infinitos pero definitivamente no es en la mayoría de casos y te invito a investigar cuando si puedes usar un bucle infinito, te daré unas pistas listeners y game loops

Aplicando esto a nuestro código ya no usaríamos esta instrucción…

nueva_contraseña_solicitada = input(":")

ya que esa variable nunca se usa , esta siendo declarada sin sentido pero si necesitamos guardar la contraseña que ingrese el usuario, y que variable ya tenia antes la contraseña que ingresaba el usuario ?? exacto…

contraseña_solicitada = input(":")

Y con estos 2 simples pasos ya sabes usar un bucle while de forma correcta, ahora si quitamos el if innecesario nuestro código se ve así…

contraseña_admin = "123"
contraseña_ingresada = input(":")
whilenot contraseña_ingresada == contraseña_admin:
		print("Esa no es la contraseña del administrador >:(")
		nueva_contraseña_solicitada = input(":")

print("Entraste en el sistema !")

Claro se puede mejorar mas haciéndolo un poco mas complejo y seguro para aun caso en la vida real, pero esta es la forma mas simplista y funcional de como funciona un sistema de login y ahora tu usuario administrador podrá ingresar al sistema, todo gracias a que usaste correctamente un bucle while pero y si no fuera necesario usar un bucle while ??

Esto me lleva al ultimo paso.

Paso 3 : No uses un bucle si no es necesario

Como programador tienes una infinidad de herramientas que puedes usar para resolver un problema, no hay una única manera de resolver un problema pero tienes que escoger y no siempre un bucle es la solución a que el usuario no ingrese bien su contraseña o no siempre es la solución al problema que se te esta presentando.

Y como se si debo usar un bucle?? pues debes usarlo si necesitas que un algoritmo se repita y si o si, pero incluso si es así no deberías de empezar a escribir tu bucle hasta que no tengas claro 2 cosas…

  • Que dato dentro de mi algoritmo tiene que cambiar para que ya no quiera que se repita mi bucle.
  • Que condición hare con ese dato.

→ Ejemplos de otras formas de escribir el código que hicimos

# ejemplo antes visto
contraseña_admin = "123"
contraseña_ingresada = input(":")
whilenot contraseña_ingresada == contraseña_admin:
		print("Esa no es la contraseña del administrador >:(")
		nueva_contraseña_solicitada = input(":")

print("Entraste en el sistema !")

# ejemplo funcional

deflogin(contraseña_ingresada):
    contraseña_admin = "123"return (contraseña_admin==contraseña_ingresada)

contraseña_ingresada = input("Tu Contraseña: ")
while login(contraseña_ingresada) != True:
        contraseña_ingresada = input("Contraseña incorrecta intenta de nuevo: ")

# ejemplo mixto
deflogin(contraseña_admin,contraseña_ingresada):
    if (contraseña_admin==contraseña_ingresada):
        print("Login realizado")
        returnTrue
    else:
        print("Login rechazado...")
        returnFalse

contraseña_admin = '123'while login(contraseña_admin,contraseña_ingresada=input("Tu Contraseña: ")) == False:
    continue# ejemplo recursivo
deflogin(contraseña_admin,contraseña_ingresada):
    if (contraseña_admin==contraseña_ingresada):
        print("Login realizado")
        returnTrue
    else:
        print("Login rechazado...")
        return login(contraseña_admin,input("Contraseña: "))

login(
      contraseña_admin='123',
      contraseña_ingresada=input("Contraseña: ")
)

<h1>Referencias</h1>

-> Te recomiendo ver este foro hay una buena discusión que tiene que ver con el tema

Mi profesor de programación dijo que el uso de bucles infinitos es mala práctica (while True, while(1), etc). ¿Es esto cierto? ¿Por qué?

Escribe tu comentario
+ 2