2010-03-07 10 views
198

Soy un nuevo programador de Python que está dando el salto de 2.6.4 a 3.1.1. Todo ha ido bien hasta que intenté usar la declaración 'else if'. El intérprete me da un error de sintaxis después del 'si' en 'else if' por una razón que no puedo entender.¿Cuál es la sintaxis correcta para 'else if'?

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

function(input('input:')) 

Probablemente me esté perdiendo algo muy simple; sin embargo, no he podido encontrar la respuesta por mi cuenta.

+2

No creo que esto funcione en 2.6.4. – wRAR

+0

De hecho, este elemento de sintaxis y semántica de Python no cambió entre estas versiones. Posiblemente nunca en absoluto. –

+0

Puede comenzar con un buen tutorial sobre if/else en Python: http://www.dreamsyssoft.com/python-scripting-tutorial/ifelse-tutorial.php –

Respuesta

333

En python "else if" se deletrea "elif".
Además, necesita dos puntos después de elif y else.

Respuesta simple a una simple pregunta. Tuve el mismo problema cuando comencé (en las últimas dos semanas).

lo que el código debe decir:

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

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

no se preocupe, que todos tienen que aprender en algún momento. Me parece extraño que Python coloque una elifis sobre la capacidad de lectura y luego usa elkif en lugar de usarlo. Sugiero mantener el manual de la API de python abierto en todo momento: http://docs.python.org/3.1/ los enlaces importantes son Tutorial: http://docs.python.org/3.1/tutorial/index.html Referencia del lenguaje: http://docs.python.org/3.1/reference/index.html Biblioteca refernce: http://docs.python.org/3.1/library/index.html –

+1

Perl usa la misma palabra clave, y la razón para esto fue para prevenir accidentes donde se olvida de terminar de escribir una declaración anterior y comienza a escribir otra si declaración. Aparentemente, ese fue un problema común al escribir el código C. –

14

¿Se refiere a elif?

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

desde tiempos antiguos, la sintaxis correcta para if/else if en Python es elif. Por cierto, se puede utilizar el diccionario si usted tiene un montón de if/else .eg

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

para los DSM, ejemplo de ejecución de funciones utilizando el diccionario.

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

Puedes, pero por favor no hagas esto. Un diccionario no es un buen reemplazo para un 'elif'. –

+0

@ s.lott, el caso de OP es simple. Si tiene que verificar muchos valores de a, un diccionario es más nítido. puede que sea un hábito no usarlo, pero lo he estado usando y me gusta este enfoque mejor que codificar muchos if/else. diablos, incluso uso diccionario para ejecutar funciones. – ghostdog74

+1

@ghostdog: Sé que * puedes * usar diccionarios para ejecutar funciones, pero la idea me asusta como los "gotos" computados o pegar cadenas Tcl juntas y 'ejecutarlas'. ¿Es esta una buena práctica? ¿Puedes nombrar un ejemplo? – msw

2

Aquí es un poco de refactorización de su función (que no utiliza "más" o "elif"):

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

@ ghostdog74: Python 3 requiere paréntesis para "imprimir".

+0

python 3 reemplazó la declaración de impresión de python 2 con una función, por lo tanto, los paréntesis requeridos, y si usted va para que pueda bueno solo use sys.stdout.write –

+2

debe ser '('1', '2')', el op está usando strings – priestc

-4

Python 3.x ha tenido algunos cambios, lo que significa que algunos programas no funcionen python2.7.

Sé que esta respuesta puede ser tarde, pero señala algunas cosas.

El equivalente de Python 3.x de else if se ha reducido a elif. Esto significa que todos los códigos else if ahora tendrán que ser elif.

Esto aquí es un ejemplo:

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!") 

Esto se estrecha ligeramente y hace que ordenar las cosas mucho más fácil.

+2

Se llama elif en python 2.5, 2.6 y 2.7 también ... así que esto no es realmente nuevo para Python 3.x, y ya se ha establecido en las respuestas existentes ... Además, sus condicionales deben usar == y no = ... sin mencionar su sangría faltante. – Dyrborg

+0

Incluso python 1 tenía elif: https://docs.python.org/release/1.6/tut/node6.html#SECTION006100000000000000000 –