2010-01-27 10 views
13

ich eine while-Schleife in Python habenWie zu tun, während Schleifen mit mehreren Bedingungen

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 

' 
' 

ich aus der Schleife brechen wollen, wenn alle diese Bedingungen erfüllt sind, über den Code nicht funktioniert

Ich hatte ursprünglich

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

was funktioniert ok, ist dies der beste Weg, dies zu tun?

Dank

+0

Können Sie klarstellen, was Sie mit "der obige Code funktioniert nicht" meinen. Was passiert, wenn Sie die Bedingung in der while-Anweisung haben? –

+0

Hallo Das erste Stück Code bricht aus, wenn eine der Bedingungen erfüllt sind, möchte ich darauf brechen, wenn alle Bedingungen Dank – mikip

Antwort

13

Ändern Sie die and s or s.

+0

Hallo Dank erfüllt sind, aber warum das es – mikip

+7

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

+0

@SilentGhost: Die im ersten Klappentext angegebene Bedingung (die * die Schleife * beibehält) ist fast die Negation der Bedingung, die im zweiten Klappentext angegeben ist (was * die Schleife unterbricht), außer dass es den falschen logischen Operator verwendet. –

-2

Verwenden Sie eine Infinity-Schleife, wie Sie sie ursprünglich gemacht haben. Seine saubersten und können Sie viele Bedingungen übernehmen, wie Sie

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

Aber es war nichts falsch mit Ihrem ursprünglichen ein verwenden, wenn innerhalb einer while True.

-1

Ich bin nicht sicher, ob es besser lesen würde, aber man könnte Folgendes tun:

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

    if something1==10: 
     condition1 = True 

    if something2==20: 
     condition2 = True 
0

Haben Sie bemerkt, dass Sie in den Code geschrieben, condition2 nie False gesetzt? Auf diese Weise wird Ihr Schleifenkörper niemals ausgeführt.

Beachten Sie auch, dass in Python not condition gegenüber condition == False bevorzugt ist; ebenso ist condition gegenüber condition == True bevorzugt.

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