2016-06-02 3 views
0

Ich mache ein unmöglich einfaches Stück Code, um nach Wörtern in einer Folge von eingegebenem Text zu suchen, aber das IN kehrt wahr zurück, wenn es offensichtlich falsch zurückgeben sollte und ich habe es anders getestet Versionen des Codes für ein paar Stunden und kann nicht Grund, warum dies passiert?!?Warum ist die IN-Anweisung wahr, wenn es offensichtlich nicht sein sollte? (viel Sinn (sobald Sie es wissen))

>>> y= "yeh im gonna lose my mind over this" 
    >>> if "screen" or "display" or "crack" or "smash" in y: 
    ...  print ("Y does this happen?") 
    ... 
    Y does this happen? #Output 

EDIT: Ich glaube, nur für eine einfache Antwort auf IN frage ich denke, diese Frage sinnvoll ist und kein Duplikat, wie es die Informationen der Ordnung der IN- und OR-Anweisung in einer Schleife, während der vorherigen Frage bringt Aussagen.

+0

[Operator Vorrang] (https://docs.python.org/3/reference/expressions.html#operator-precedence) ist gut in Python definiert . Es gibt keine dunkle Magie hier, nur einfache _obvious_ Regeln angewendet. –

+0

Ja, ich weiß, aber fast die ganze Physik wurde früher als Magie betrachtet, bis wir mit einigen Thoeries auftraten! :) –

+0

@PythonGuy_InNeed FWIW Ich wählte diese Frage, weil es unser Standardziel für viele Fragen ist, wo Leute, die nicht an Python gewöhnt sind, diesen Fehler mit 'oder' machen, nicht weil deine Frage buchstäblich identisch ist. Außerdem empfehle ich auf jeden Fall Dinge wie "any" oder etwas kürzer als die sehr repetitive Antwort, die Sie gewählt haben. Stell dir vor, du tust das für eine Liste von 12 Gegenständen! –

Antwort

1

Sie sind wahrscheinlich nicht mit in wie beabsichtigt:

if "screen" in y or "display" in y or "crack" in y or "smash" in y 

Was Sie getan haben, kehren immer True weil der truthy Wert eines nicht leeren String ist True

So if "screen" kehrt True und egal was die anderen sind, if wertet immer True

0

or ist lasily ausgewertet und hat niedriger Priorität als in Aussage, die Ihre Aussage bedeutet

if "screen" or "display" or "crack" or "smash" in y 

zu

if "screen" or ("display" or ("crack" or ("smash" in y))) 

als „Bildschirm“ wertet ist ein wahrer Wert, or „liefert True“ ist und die restlichen Die Bedingung wird nie ausgewertet.

1

Sie wollen wahrscheinlich einen any Test hier:

In [1]: y = "yeah I'm gonna lose my mind over this" 

In [2]: if any(word in y for word in ('screen', 'display', 'crack', 'smash')): 
    ...:  print('why does this happen?') 
    ...: else: 
    ...:  print("it doesn't ;)") 
    ...: 
it doesn't ;) 

In [3]: if any(word in y for word in ('yeah', 'screen', 'display', 'crack', 'smash')): 
    ...:  print('now it happens') 
    ...: 
now it happens 
Verwandte Themen