web-dev-qa-db-de.com

Wie man mehrere Bedingungen für eine if-Anweisung in Python hat

Ich schreibe also Code in Python 3.1.5, der erfordert, dass es mehr als eine Bedingung gibt, damit etwas passieren kann. Beispiel:

def example(arg1, arg2, arg3):
    if arg1 == 1:
        if arg2 == 2:
            if arg3 == 3:
                print("Example Text")

Das Problem ist, wenn ich das mache, wird nichts gedruckt, wenn arg2 und arg3 etwas anderes als 0 sind. Hilfe?

6
SooBaccaCole

Ich würde ... benutzen 

def example(arg1, arg2, arg3):
     if arg1 == 1 and arg2 == 2 and arg3 == 3:
          print("Example Text")

Der Operator and ist identisch mit dem gleichnamigen Logikgatter. es wird nur dann 1 zurückgegeben, wenn alle Eingänge 1 sind. Sie können auch den Operator or verwenden, wenn Sie dieses Logikgatter wünschen.

BEARBEITEN: Eigentlich funktioniert der in Ihrem Beitrag bereitgestellte Code gut mit mir. Ich sehe keine Probleme damit. Ich denke, dass dies ein Problem mit Ihrem Python sein kann, nicht die tatsächliche Sprache.

12
SSung2710

Ich bin ein wenig zu spät zur Party, aber ich dachte, ich würde eine Möglichkeit teilen, wenn es identische Bedingungen gibt, dh ob alle, eine beliebige Menge oder eine bestimmte Menge von A_1 = A_2 und B_1 = B_2 dies können auf folgende Weise gemacht werden:

cond_list_1=["1","2","3"]
cond_list_2=["3","2","1"]
nr_conds=1

if len([True for i, j in Zip(cond_list_1, cond_list_2) if i == j])>=nr_conds:
    print("At least " + str(nr_conds) + " conditions are fullfilled")

if len([True for i, j in Zip(cond_list_1, cond_list_2) if i == j])==len(cond_list_1):
    print("All conditions are fullfilled")

Das bedeutet, dass Sie einfach die beiden Ausgangslisten ändern können, zumindest für mich ist dies einfacher.

1
no nein

Angenommen, Sie übergeben Strings statt Ganzzahlen. Versuchen Sie, die Argumente in Ganzzahlen umzuwandeln:

def example(arg1, arg2, arg3):
     if int(arg1) == 1 and int(arg2) == 2 and int(arg3) == 3:
          print("Example Text")

(Bearbeitet, um zu betonen, dass ich nicht um Klarstellung bittet; ich habe versucht, in meiner Antwort diplomatisch zu sein. ????)

0
Christian Henry

Vielleicht etwas seltsam oder schlecht üben, aber dies ist eine Möglichkeit, dies zu tun.

(arg1, arg2, arg3) = (1, 2, 3)

if (arg1 == 1)*(arg2 == 2)*(arg3 == 3):
    print('Example.')

Alles multipliziert mit 0 == 0. Wenn eine dieser Bedingungen fehlschlägt, wird dies als falsch ausgewertet.

0
Elyria

Darian Moody hat eine nette Lösung für diese Herausforderung in seinem Blogbeitrag :

a = 1
b = 2
c = True

rules = [a == 1,
         b == 2,
         c == True]

if all(rules):
    print("Success!")

Die Methode all () gibt True zurück, wenn alle Elemente in der angegebenen Iteration wahr sind. Wenn nicht, wird False zurückgegeben.

Sie können ein little mehr darüber in den python docs hier und weiteren Informationen und Beispielen hier lesen.

(Ich habe die ähnliche Frage auch mit dieser Info hier beantwortet - Wie man mehrere Bedingungen für eine if -Anweisung in Python hat )

0
burkesquires