2016-03-26 6 views
-2

Also, ich habe dies:Python: Während nicht arbeitet mit „oder“

while cancer[j] != ("l"or"r"or"c") 

und es ist an der ersten „l“ in der Art und Weise zu stoppen, wenn es einige r und c zwischen der Zeichenfolge hat, es handelt so, als gäbe es kein "oder" und nur das "l". meine Zeichenfolge

zum Beispiel ist diese:

c56r36c20l80c23l180c23l20c55r70 

und es gibt:

c56r36c20 

Es hält direkt vor dem ersten "l", die "c" und "r" Skipping in der Weg.

+5

'("l" oder "r" oder "c") == "l"'. Du willst Krebs nicht in {'l', 'r', 'c'} '. –

+0

lesen Sie bitte in der Python-Dokumentation, wie der Operator 'or' funktioniert. 'l 'oder' r 'oder' c'' Ausdruck haben immer den Wert' 'l''. Sie benötigen hier den Operator "nicht in". –

+0

müssen Sie lernen, was der Operator 'or' logisch macht. – n1c9

Antwort

1

Es funktioniert einwandfrei; es funktioniert einfach nicht, wie Sie denken, es sollte:

("l" or "r" or "c") 

gibt den ersten nonfalse Artikel (bool(item) is true) auf dieser Liste, oder falsch, wenn es keine ist. Das bedeutet, dass es "l" zurückgibt.

So ist Ihr while-Schleife tatsächlich:

while cancer[j] != "l": 

Was Sie wollen, stattdessen ist so etwas wie:

while cancer not in ('l', 'r', 'c') 

oder

while not cancer in ('l', 'r', 'c') 

Beide sind so ziemlich die gleiche Sache .

+0

danke, ich habe es repariert! – NachoLZ

1

Wenn normalerweise einer der Ausdrücke in einer 'oder' -Anweisung True ergibt, wird der Rest des Ausdrucks überhaupt nicht ausgewertet. Wenn also das erste 'l' in der Saite angetroffen wird, bricht die while-Bedingung genau dort ab.

Sie sollten so etwas wie haben:

while cancer[j] not in ('l', 'r', 'c'): 
Verwandte Themen