2010-01-27 9 views
13

que tienen un bucle while en PythonCómo bucle do con múltiples enfermedades

condition1=False 
condition1=False 
val = -1 

while condition1==False and condition2==False and val==-1: 
    val,something1,something2 = getstuff() 

    if something1==10: 
     condition1 = True 

    if something2==20: 
     condition2 = True 

' 
' 

Quiero salir del bucle cuando se cumplen todas estas condiciones, el código anterior no funciona

Originalmente tuve

while True: 
     if condition1==True and condition2==True and val!=-1: 
     break 

que funciona bien, ¿es esta la mejor manera de hacerlo?

Gracias

+0

¿Puede aclarar lo que quiere decir con "el código anterior no funciona". ¿Qué sucede cuando tienes la condición en la declaración while? –

+0

Hola El primer bit de código se rompe si se cumple cualquiera de las condiciones, quiero salir cuando todas las condiciones se cumplen Gracias – mikip

Respuesta

13

Cambiar las and s a or s.

+0

Hola, gracias, pero ¿por qué hace esto hace que funcione – mikip

+7

http: // en .wikipedia.org/wiki/De_Morgan% 27s_laws –

+0

@SilentGhost: la condición dada en la primera propaganda (que * mantiene * el ciclo) es casi la negación de la condición dada en la segunda propaganda (que * rompe * el ciclo), excepto que usa el operador lógico incorrecto. –

-2

utiliza un bucle infinito como lo que has hecho originalmente. Su más limpio y se puede incorporar muchas condiciones como desee

while 1: 
    if condition1 and condition2: 
     break 
    ... 
    ... 
    if condition3: break 
    ... 
    ... 
2
while not condition1 or not condition2 or val == -1: 

pero no había nada malo con el original de la utilización de un if dentro de un tiempo Verdadero.

-1

No estoy seguro de que sería leer mejor pero se puede hacer lo siguiente:

while any((not condition1, not condition2, val == -1)): 
    val,something1,something2 = getstuff() 

    if something1==10: 
     condition1 = True 

    if something2==20: 
     condition2 = True 
0

¿Ha notado que en el código que envió, condition2 no se ajusta a False? De esta forma, tu cuerpo de bucle nunca se ejecuta.

Además, tenga en cuenta que en Python, se prefiere not condition a condition == False; asimismo, se prefiere condition a condition == True.

0
condition1 = False 
condition2 = False 
val = -1 
#here is the function getstuff is not defined, i hope you define it before 
#calling it into while loop code 

while condition1 and condition2 is False and val == -1: 
#as you can see above , we can write that in a simplified syntax. 
    val,something1,something2 = getstuff() 

    if something1 == 10: 
     condition1 = True 

    elif something2 == 20: 
# here you don't have to use "if" over and over, if have to then write "elif" instead  
    condition2 = True 
# ihope it can be helpfull