El bucle while debería estar rompiendo, pero continúa.
Estoy ejecutando un bucle que realiza la tarea hasta cierto punto, se detiene por unos segundos y luego continúa. Si ejecuto este código, esperaría que el bucle se detenga cuando se establezca b en 1 y llame a la función de espera, pero de alguna manera no se detiene. Si elimino la llamada a la función después del bucle while, se detiene como se espera. ¿Qué está pasando aquí?
import threading
def wait():
timer = threading.Timer(5, run())
timer.start()
def run():
a = 1
b = 2
while a < 100 and b == 2:
a = a + 1
print(a)
if a > 57:
b = 1
wait()
if __name__ == '__main__':
run()
davy.ai
Hay algunos problemas con el código proporcionado.
En primer lugar, la llamada a la función dentro del constructor de
Timer
no debe tener paréntesis, es decir,timer = threading.Timer(5,run)
en lugar detimer = threading.Timer(5,run())
.En segundo lugar, la función
wait()
se está llamando dentro de la funciónrun()
después del bucle while, cuando debería llamarse dentro de la declaraciónif
que verifica sib
es igual a 1.La razón por la que el bucle no se detiene cuando
b
es igual a 1 es porque se llama a la funciónwait()
independientemente del valor deb
.Para solucionar este problema, mueve la llamada a la función
wait()
dentro de la declaraciónif
que verifica sib
es igual a 1, de la siguiente manera:De esta manera, la función
wait()
solo se llamará cuandob
sea igual a 1, permitiendo que el bucle se rompa y espere 5 segundos antes de continuar.