2010-01-27 43 views
13

Ho un ciclo while in PythonCome fare cicli while con condizioni multiple

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 

' 
' 

voglio spezzare il ciclo quando tutte queste condizioni sono vere, il codice di cui sopra non funziona

Originariamente avevo

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

che funziona bene, è questo il modo migliore per farlo?

Grazie

+0

Puoi chiarire cosa intendi con "il codice sopra non funziona". Cosa succede quando hai la condizione nella dichiarazione while? –

+0

Hi Il primo bit del codice scoppia se una delle condizioni sono soddisfatte, voglio uscire quando tutte le condizioni sono soddisfatte Grazie – mikip

risposta

13

Cambiare le and s per or s.

+0

Ciao grazie, ma perché questo rende il lavoro – mikip

+7

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

+0

@SilentGhost: la condizione indicata nel primo blocco (che * mantiene * il ciclo) è quasi la negazione della condizione data nel secondo blocco (che * interrompe * il ciclo), tranne che usa l'operatore logico sbagliato. –

-2

utilizza un ciclo infinito simile a quello che hai fatto in origine. Il suo più pulito e è possibile incorporare molte condizioni come si desidera

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

ma non c'era niente di sbagliato con l'originale di utilizzare un caso all'interno di un po 'vero.

-1

io non sono sicuro che sarebbe leggere meglio, ma si potrebbe fare la seguente:

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

    if something1==10: 
     condition1 = True 

    if something2==20: 
     condition2 = True 
0

Avete notato che nel codice che hai postato, condition2 non è mai impostato False? In questo modo, il tuo corpo del ciclo non viene mai eseguito.

Inoltre, si noti che in Python, not condition è preferito a condition == False; allo stesso modo, condition è preferito per 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 
Problemi correlati