2010-01-27 22 views
13

Mam pętli while w pythonJak zrobić podczas pętli z wielu warunków

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 

' 
' 

Chcę wyrwać się z pętli, gdy wszystkie te warunki są spełnione, powyższy kod nie działa

Pierwotnie miałem

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

który działa dobrze, jest to najlepszy sposób to zrobić?

Dzięki

+0

Czy możesz wyjaśnić, co masz na myśli przez "powyższy kod nie działa". Co się dzieje, gdy masz warunek w instrukcji while? –

+0

Hi Pierwszy kawałek kodu wybuchnie, jeśli któryś z warunków nie jest spełniony, chcę się wyrwać, gdy wszystkie warunki są spełnione Dzięki – mikip

Odpowiedz

13

Zmienić and s do or s.

+0

Hi Dzięki, ale dlaczego to, że praca – mikip

+7

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

+0

@SilentGhost: Warunek podany w pierwszym blurb (który * utrzymuje * pętlę) jest prawie negacją warunku podanego w drugim blurb (który * zrywa * pętlę), z tym wyjątkiem, że używa niewłaściwego operatora logicznego. –

-2

użyć pętli nieskończoności, jak to, co pierwotnie zrobiłeś. Jej najczystsze i można włączyć wiele warunków, jak chcesz

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

Ale nie było nic złego z oryginału za pomocą if wewnątrz chwilę True.

-1

Nie jestem pewien, czy to czytać lepiej, ale można wykonać następujące czynności:

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

    if something1==10: 
     condition1 = True 

    if something2==20: 
     condition2 = True 
0

Czy zauważyliście, że w kodzie pisał, condition2 nigdy nie jest ustawiony na False? W ten sposób korpus twojej pętli nigdy nie zostanie wykonany.

Należy również zauważyć, że w Python, not condition jest preferowany do condition == False; podobnie, condition jest preferowany do 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 
Powiązane problemy