es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Qué hace que este bucle while sea un bucle infinito hasta que utilice el comando break en Python?

Estoy tratando de entender qué está mal con el siguiente código.

Esta versión, utilizando valores booleanos, funciona bien con o sin el break:

print("Ingrese los nombres para el concurso exactamente como desea que se escriban.")
listo = False
while listo == False:
    nombre = input("Ingrese su nombre: ")
    hay_otros = input("¿Hay otros participantes? Escriba S o N: ").lower()
    if hay_otros == "s":
        listo = False
        print("¡Llame al próximo participante!")
    elif hay_otros == "n":
        listo = True
        print("Hemos terminado. Nos pondremos en contacto pronto.")
        break

Sin embargo, cuando intento utilizar valores enteros para listo, se requiere el break para salir del ciclo, de lo contrario se ejecuta indefinidamente. ¿Por qué es eso?

print("Ingrese los nombres para el concurso exactamente como desea que se escriban.")
listo = 0
while listo == 0:
    nombre = input("Ingrese su nombre: ")
    hay_otros = input("¿Hay otros participantes? Escriba S o N: ").lower()
    if hay_otros == "s":
        listo = 0
        print("¡Llame al próximo participante!")
    elif hay_otros == "n":
        listo = 1
        print("Hemos terminado. Nos pondremos en contacto pronto.")
        #break
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En la segunda versión del código, usando valores enteros para list_done, se utiliza == en lugar de = en las declaraciones if y elif. Esto está causando un problema porque == es un operador de comparación y no un operador de asignación. Por lo tanto, el valor de list_done nunca se cambia desde su valor inicial de 0. Como resultado, la condición del bucle while siempre es verdadera y el bucle se ejecuta indefinidamente a menos que se use break para salir del bucle.

    Para solucionar esto, debería utilizarse = en lugar de == para asignar valores a list_done.

    Código corregido:

    print("Ingrese los nombres para el concurso exactamente como desea que se escriban.")
    list_done = 0
    while list_done == 0:
        name = input("Ingrese su nombre: ")
        others_there = input("¿Hay otros participantes? Escriba Y o N: ").lower()
        if others_there == "y":
            list_done = 0
            print("¡Llame al próximo participante!")
        elif others_there == "n":
            list_done = 1
            print("Hemos terminado. Nos pondremos en contacto pronto.")
            #break
    

Comments are closed.