2010-03-07 15 views
198

Ich bin ein neuer Python-Programmierer, der den Sprung von 2.6.4 nach 3.1.1 macht. Alles ist gut gelaufen, 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.Was ist die korrekte Syntax für 'else if'?

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

function(input('input:')) 

Ich vermisse wahrscheinlich etwas sehr einfach; Allerdings konnte ich die Antwort nicht selbst finden.

+2

Ich glaube nicht, dass dies in 2.6.4 funktioniert. – wRAR

+0

Dieses Element der Syntax und Semantik von Python hat sich zwischen diesen Versionen nicht geändert. Wahrscheinlich überhaupt nicht. –

+0

Sie können mit einem guten Tutorial auf If/Else in Python beginnen: http://www.dreamsyssoft.com/python-scripting-tutorial/ifelse-tutorial.php –

Antwort

333

In Python "else if" wird "elif" geschrieben.
Auch benötigen Sie einen Doppelpunkt nach dem elif und dem else.

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

So sollten Sie den Code lesen:

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

function(input('input:')) 
+5

keine Sorgen, wir alle müssen irgendwann lernen. Ich finde es komisch, dass Python solch eine Elphisise auf Lesbarkeit setzt und dann geht und Elkif benutzt, anstatt sonst. Ich schlage vor, das Python-API-Handbuch immer offen zu halten: http://docs.python.org/3.1/ die wichtigen Links sind Tutorial: http://docs.python.org/3.1/tutorial/index.html Sprachreferenz: http://docs.python.org/3.1/reference/index.html Bibliothek Referenz: http://docs.python.org/3.1/library/index.html –

+1

Perl verwendet das gleiche Schlüsselwort, und das Grundprinzip war es, Unfälle zu vermeiden, wo Sie vergessen, eine vorherige else-Anweisung zu schreiben und Sie beginnen, eine andere zu schreiben wenn Aussage. Anscheinend war das ein häufiges Problem beim Schreiben von C-Code. –

14

Haben Sie elif bedeuten?

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

seit alten Zeiten, ist die korrekte Syntax für if/else if in Python elif. By the way, können Sie Wörterbuch verwenden, wenn Sie eine Menge if/else .eg

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

Für msw, Beispiel für die Ausführung Funktionen Wörterbuch haben.

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() 
+1

Sie können, aber bitte tun Sie das nicht. Ein Wörterbuch ist kein guter Ersatz für einen 'elif'. –

+0

@ s.lott, OPs Fall ist einfach. Wenn er nach vielen Werten von a suchen muss, ist ein Wörterbuch sauberer. Sie könnten es zur Angewohnheit machen, es nicht zu benutzen, aber ich habe es benutzt, und ich mag diesen Ansatz besser als die Codierung vieler if/else. heck, ich benutze sogar Wörterbuch, um Funktionen auszuführen. – ghostdog74

+1

@ghostdog: Ich weiß, dass Sie * Wörterbücher verwenden können, um Funktionen auszuführen, aber die Idee macht mir Angst, wie berechnete Gotos oder Tcl-Zeichenfolgen zusammenzufügen und sie auszuführen. Ist das eine gute Praxis? Kannst du ein Beispiel nennen? – msw

2

ist hier ein wenig Refactoring Ihrer Funktion (es "anders" nicht verwenden oder "Elif"):

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

@ ghostdog74: Python 3 erfordert Klammern für "Druck".

+0

Python 3 ersetzt Python 2 print-Anweisung mit einer Funktion also die erforderlichen Klammern, und wenn Sie so gehen, dass Sie als naja, einfach sys.stdout.write verwenden –

+2

sollte '('1', '2')' sein, das Op verwendet Strings – priestc

-4

Python 3.x hatte einige Änderungen, was bedeutet, dass einige Python2.7-Programme möglicherweise nicht funktionieren.

Ich weiß, dass diese Antwort zu spät sein kann, aber es zeigt einige Dinge aus.

Python 3.x entspricht else if wurde auf elif geschrumpft. Das bedeutet, dass der gesamte Code else if nun elif sein muss.

hier Dies ist ein Beispiel:

print ("Hello! Type a letter. (a for adding, s for subtracting)") 
answer = input() 
if answer = "a": 
adding() #This would lead to a define, e.g def adding(): 

elif answer = "b": 
subtracting() #This would lead to a define, e.g def adding(): 

else: 
print ("Invalid selection!") 

Dies engt es leicht und macht Dinge viel einfacher zu sortieren.

+2

Es heißt elif in Python 2.5, 2.6 und 2.7 ... also das ist nicht wirklich neu für Python 3.x, und wurde bereits in vorhandenen Antworten angegeben ... Außerdem müssen Ihre Bedingungen == und nicht = ... verwendet werden, ganz zu schweigen von Ihrer fehlenden Einrückung. – Dyrborg

+0

Sogar Python 1 hatte elif: https://docs.python.org/release/1.6/tut/node6.html#SECTION006100000000000000000 –

Verwandte Themen