Saltar al contenido

Problemas de ruptura del bucle while de Python

Solución:

La condición de la while El bucle solo se verifica entre iteraciones del cuerpo del bucle, por lo que si cambia la condición en el medio del bucle, la iteración actual terminará antes de que termine el bucle. Si quieres romper un bucle inmediatamente, necesitas cualquiera break (que rompe automáticamente el ciclo independientemente de la condición) o continue (que salta a la siguiente iteración y, por lo tanto, terminará el ciclo si la condición ya no es cierta).

Utilizando while True: con un break Cuando desea detener el bucle, generalmente es mucho más sencillo que tratar de controlar el bucle configurando y desarmando una bandera.

FWIW, en lugar de copiar y pegar el código para ingresar los dos números, y tener dos formas diferentes de salir del bucle, podría poner todo eso en una función y romper el bucle con un Exception, como esto:

print("Enter two numbers and I will tell you the sum of the numbers.")
print("Press 'q' at anytime to exit.")


def input_number(prompt: str) -> int:
    """Ask the user to input a number, re-prompting on invalid input.
    Exception: raise EOFError if the user enters 'q'."""
    while True:
        try:
            number = input(f"{prompt} number: ")
            if number == 'q':
                raise EOFError
            return int(number)
        except ValueError:
            print("Please enter a number!")


while True:
    try:
        numbers = (input_number(n) for n in ("First", "Second"))
        print(f"The answer is: {sum(numbers)}")
    except EOFError:
        break

Esto hace que sea más fácil extender el programa para manejar más de dos entradas; intente agregar un “Tercero” después de donde dice “Primero” y “Segundo”. 🙂

Una vez que ejecute el programa y escriba “q”, sí, de hecho keep_going se establecerá en False pero NO QUIERE DECIR ya romperá el bucle, solo hará que el keep_going ser igual a False así en el SIGUIENTE ITERACIÓN detendrá el bucle. ¿Porqué es eso? porque seria asi while keep_going: -> while False: así que ya que no es True por lo tanto, ya no se ejecuta el programa.

Ahora basado en tu objetivo como mencionaste. Puede hacerlo de esta manera donde puede agregar el break.

if first_number == 'q':
    keep_going = False
    break
# Prompt for user to input second number and store it in a variable.
second_number = input("Second number: ")
# Create a break when entering the second number.
if second_number == 'q':
    keep_going = False
    break

También me gustaría sugerir que lo haga de esta manera, es más específico en términos de lo que sucederá en el código, pero por supuesto, depende de usted.

first_number = input("First number: ")
# Create a break when entering the first number.
if first_number == 'q':
    keep_going = False
    break
# Prompt for user to input second number and store it in a variable.
# Create a break when entering the second number.
else:
    second_number = input("Second number: ")
    if second_number =='q':
        keep_going = False
        break

Los bucles while se ejecutan hasta que su condición dada es falsa. Un ciclo sólo comprobará su condición cuando sea necesario (la ejecución del programa se mueve a la parte superior del ciclo). En casi todos los casos, esto ocurre cuando se ha ejecutado todo el cuerpo del bucle. Mira aquí:

keep_going = True

while keep_going:
  keep_going = False
  # keep_going is False, but this will still print once
  # because the loop has not checked its condition again.
  print("Will execute once")

“Se ejecutará una vez” imprime una sola vez incluso después keep_going está configurado en False. Esto sucede porque el bucle while no vuelve a comprobar su condición hasta que se ha ejecutado todo su cuerpo.

Sin embargo, break las declaraciones son diferentes. A break La declaración causará que un bucle salga inmediatamente sin importar qué.

keep_going = True

while keep_going:
  break # Exits the while loop immediately. The condition is not checked.
  print("Will never print")

Aquí, no se imprime nada aunque keep_going es True todo el tiempo. break hizo que el bucle saliera independientemente de la condición.

A continue Esta sentencia moverá la ejecución del programa al inicio del ciclo y hará que su condición sea revisada nuevamente.

En este ejemplo, continue envía la ejecución del programa al inicio del ciclo. Ya que keep_going estaba configurado para False, no se imprimirá nada porque el ciclo while saldrá después de darse cuenta de que su condición se evalúa como falsa.

keep_going = True

while keep_going:
  keep_going = False
  continue
  print("Will never print")
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *