Was ist die richtige Syntax für 'else if'?

284

Ich bin ein neuer Python-Programmierer, der den Sprung von 2.6.4 zu 3.1.1 macht. Alles ist gut gegangen, bis ich versucht habe, die 'else if'-Anweisung zu verwenden. Der Interpreter gibt mir einen Syntaxfehler nach dem 'if' in 'else if' aus einem Grund, den ich anscheinend nicht herausfinden kann.

def function(a):
    if a == '1':
        print ('1a')
    else if a == '2'
        print ('2a')
    else print ('3a')

function(input('input:'))

Mir fehlt wahrscheinlich etwas sehr Einfaches; Ich konnte die Antwort jedoch nicht alleine finden.

Paul Turner
quelle
3
Ich denke nicht, dass dies in 2.6.4 funktioniert.
wRAR
In der Tat hat sich dieses Element der Python-Syntax und -Semantik zwischen diesen Versionen nicht geändert. Möglicherweise überhaupt nicht.
Mike Graham
Sie können mit einem guten Tutorial über if / else in Python beginnen: dreamsyssoft.com/python-scripting-tutorial/ifelse-tutorial.php
Triton Man

Antworten:

444

In Python wird "else if" "elif" geschrieben.
Außerdem benötigen Sie einen Doppelpunkt nach dem elifund dem else.

Einfache Antwort auf eine einfache Frage. Ich hatte das gleiche Problem, als ich anfing (in den letzten Wochen).

Ihr Code sollte also lauten:

def function(a):
    if a == '1':
        print('1a')
    elif a == '2':
        print('2a')
    else:
        print('3a')

function(input('input:'))
Lyndon White
quelle
11
Keine Sorge, wir müssen alle irgendwann lernen. Ich finde es seltsam, dass Python eine solche Elphisise auf Lesbarkeit legt und dann Elkif verwendet, anstatt es sonst zu verwenden. Ich empfehle, das Python-API-Handbuch jederzeit geöffnet zu lassen: docs.python.org/3.1 Die wichtigen Links sind Tutorial: docs.python.org/3.1/tutorial/index.html Sprachreferenz: docs.python.org/3.1/reference /index.html Bibliotheksreferenz: docs.python.org/3.1/library/index.html
Lyndon White
1
Perl verwendet dasselbe Schlüsselwort. Der Grund dafür war, Unfälle zu vermeiden, bei denen Sie vergessen, das Schreiben einer vorherigen else-Anweisung zu beenden, und eine weitere if-Anweisung schreiben. Anscheinend war das ein häufiges Problem beim Schreiben von C-Code.
Nate Glenn
1
@NateGlenn Perl verwendet tatsächlich elsif, ich denke, Python musste dieses eine Zeichen effizienter sein. "Elif" scheint mit dem C-Präprozessor entstanden zu sein, der #eliflange vor Python AFAICT verwendet wurde. In diesem Zusammenhang ist es natürlich wertvoll, eine Single-Token-Direktive zu haben, da Parsing #else if <code>vs. #else <code that could theoretically even be an if statement>eine Syntax kompliziert hätte, die einfach sein sollte.
FeRD
20

Meinst du elif?

Nick Presta
quelle
13
def function(a):
    if a == '1':
        print ('1a')
    elif a == '2':
        print ('2a')
    else:
        print ('3a')
Tom
quelle
10

Seit jeher ist die richtige Syntax für if/else ifin Python elif. Übrigens können Sie Wörterbuch verwenden, wenn Sie viel if/else.eg haben

d={"1":"1a","2":"2a"}
if not a in d: print("3a")
else: print (d[a])

Beispiel für die Ausführung von Funktionen mit dem Wörterbuch für msw.

def print_one(arg=None):
    print "one"

def print_two(num):
    print "two %s" % num

execfunctions = { 1 : (print_one, ['**arg'] ) , 2 : (print_two , ['**arg'] )}
try:
    execfunctions[1][0]()
except KeyError,e:
    print "Invalid option: ",e

try:
    execfunctions[2][0]("test")
except KeyError,e:
    print "Invalid option: ",e
else:
    sys.exit()
Ghostdog74
quelle
1
Sie können, aber bitte tun Sie dies nicht. Ein Wörterbuch ist kein guter Ersatz für ein elif.
S.Lott
@ s.lott, OPs Fall ist einfach. Wenn er nach vielen Werten von a suchen muss, ist ein Wörterbuch ordentlicher. Sie könnten es sich zur Gewohnheit machen, es nicht zu verwenden, aber ich habe es verwendet und ich mag diesen Ansatz besser als viele zu codieren, wenn / sonst. Zum Teufel, ich benutze sogar Wörterbuch, um Funktionen auszuführen.
Ghostdog74
1
@ghostdog: Ich weiß , dass Sie können die Wörterbücher verwenden Funktionen ausführen , aber die Idee macht mir Angst , wie berechnet gotos oder Tcl Einfügen Strings zusammen und execsie ing. Ist das eine gute Praxis? Können Sie ein Beispiel nennen?
Msw
@msw: Es ist eine sehr gute Übung. Beispiel: Sie lesen einen XML-Stream nicht für eine einfache Scraping-Übung, sondern für eine, bei der Sie unterschiedliche Verarbeitung für verschiedene Element-Tags durchführen müssen, z. B. ist eine Excel 2007-Tabellenkalkulationsdatei eine Zip-Datei mit mehreren XML-Dokumenten, von denen einige sehr komplex sind. Sie haben für jedes Tag eine eigene Methode. Sie versenden über ein Wörterbuch. Nichts, wovor man Angst haben müsste. Wenn die Methode für die Handhabung <foo>lautet do_foo, können Sie das Diktat sogar im laufenden Betrieb erstellen, wenn die App gestartet wird.
John Machin
1
Beachten Sie, dass das Wörterbuch über eine .getMethode verfügt, mit der Sie einen Standardwert angeben können. Ihr erstes Beispiel kann geschrieben werden alsprint d.get(a, "3a")
codeape
4

Hier ist ein kleines Refactoring Ihrer Funktion (es wird nicht "else" oder "elif" verwendet):

def function(a):
    if a not in (1, 2):
        a = 3
    print(str(a) + "a")

@ ghostdog74: Python 3 benötigt Klammern für "print".

Winston C. Yang
quelle
Python 3 ersetzte die Druckanweisung von Python 2 durch eine Funktion, also die erforderlichen Klammern, und wenn Sie dies möchten, können Sie auch einfach sys.stdout.write verwenden
Dan D.
2
sollte sein ('1', '2'), die
Operation
2
def function(a):
    if a == '1':
        print ('1a')
    else if a == '2'
        print ('2a')
    else print ('3a')

Sollte korrigiert werden zu:

def function(a):
    if a == '1':
        print('1a')
    elif a == '2':
        print('2a')
    else:
        print('3a')

Wie Sie sehen können, sollten nach '2' Doppelpunkte nach elif stehen, und nach der else-Anweisung sollte eine neue Zeile stehen, und der Abstand zwischen print und den Klammern sollte geschlossen werden.

MilkyWay90
quelle