Condicionales en Python — teoría de if, elif y else con notas de FP1, una escalera de decisiones (y el 9,2 que salió «Aprobado»)

En mi primera práctica de FP1 tenía que escribir un clasificador de notas. Lo probé con un 6 y salió «Aprobado». Lo probé con un 3 y salió «Suspenso». Perfecto, lo entregué. Al día siguiente un compañero lo probó con su 9,2 del parcial y el programa le dijo, muy serio, que había aprobado. Ni sobresaliente ni notable: aprobado. El código era este:

# El clasificador de mi primera práctica (con el fallo)
nota = 9.2

if nota >= 5:                  # con un 9.2 esta ya es True...
    calificacion = "Aprobado"
elif nota >= 7:                # ...así que Python ni mira esta
    calificacion = "Notable"
elif nota >= 9:                # ni esta
    calificacion = "Sobresaliente"
else:
    calificacion = "Suspenso"

print(f"Nota {nota} → {calificacion}")

Y esta fue la salida, sin un solo mensaje de error:

Nota 9.2 → Aprobado

Python no se equivocó: hizo exactamente lo que le pedí. Le pregunté primero «¿es mayor o igual que 5?», un 9,2 dijo que sí y ahí se acabó la conversación. Las otras dos preguntas ni se miraron. Al terminar este artículo sabrás por qué, y no te volverá a pasar.

Hoy toca el tema que convierte un programa que calcula en un programa que decide: los condicionales en Python, con if, elif y else. Hasta ahora tus programas ejecutaban todas las líneas, de arriba abajo, sin saltarse ninguna. Con un condicional, Python ejecuta unas líneas u otras según si se cumple una condición. Si vienes de Operadores en Python, ya tienes media teoría hecha: las comparaciones (>=, ==, !=) y los operadores lógicos (and, or, not) son justo lo que va dentro de cada condición. Después de este artículo te esperan la práctica de condicionales con tres programas completos y los ejercicios con solución.

¿Qué es un condicional?

Un condicional es una instrucción que le dice a Python: «si se cumple esto, haz esto otro; si no, haz otra cosa (o nada)». Lo hacemos todo el rato sin pensarlo: si llueve, cojo el paraguas; si no llueve, no. En Python se escribe casi igual:

llueve = True

if llueve:                     # llueve ya es un booleano: sobra el == True
    print("Cojo el paraguas")
else:                          # el else no lleva condición
    print("No necesito paraguas")

Como llueve vale True, el programa imprime:

Cojo el paraguas

La condición es cualquier expresión que dé True o False. Aquí es directamente una variable booleana, pero lo normal es una comparación como nota >= 5, que Python evalúa en el momento: con nota = 7.5 da True y con nota = 4.0 da False. Fíjate en que no hace falta escribir if llueve == True:. llueve ya es True o False, y compararlo con True solo añade ruido.

En los apuntes de FP1 los condicionales aparecen como «ejecución condicional»: la sentencia if decide si un bloque se ejecuta o se salta, y en los dos casos el programa sigue por la instrucción que hay debajo del bloque.

La estructura if

La forma más sencilla es el if solo. Si la condición es True, ejecuta su bloque; si es False, se lo salta entero:

nota = 7.5

if nota >= 5:                        # la condición vale True o False
    print("Aprobado")                # 4 espacios: esta línea es del if
    print("¡A por la siguiente!")    # y esta también
print("Fin del programa")            # sin sangría: se ejecuta siempre

Con nota = 7.5 salen las tres líneas:

Aprobado
¡A por la siguiente!
Fin del programa

Ahora cambia solo el dato a nota = 4.0 (es el mismo programa con otro valor, archivo if_falso.py). La salida es:

Fin del programa

Las dos líneas sangradas desaparecen y «Fin del programa» sigue saliendo. ¿Por qué? Porque Python sabe qué líneas son del if por la sangría, no por ninguna llave ni palabra de cierre. Tres reglas que no se negocian:

  • Los dos puntos : al final de la línea del if son obligatorios. Sin ellos, SyntaxError.
  • La sangría (4 espacios) marca el bloque. Todas las líneas con la misma sangría debajo del if le pertenecen.
  • La primera línea sin sangría cierra el bloque y se ejecuta siempre.
Línea¿Es del if?Con 7.5Con 4.0
print("Aprobado")Sí (4 espacios)Se ejecutaSe salta
print("¡A por la siguiente!")Sí (4 espacios)Se ejecutaSe salta
print("Fin del programa")No (0 espacios)Se ejecutaSe ejecuta

Configura VS Code para que el tabulador inserte 4 espacios (viene así por defecto en archivos .py). Mezclar tabuladores y espacios en el mismo bloque es una de las formas más tontas de ganarse un IndentationError o un TabError.

La estructura if/else

Cuando quieres hacer una cosa si se cumple la condición y otra distinta si no, añades else:

nota = 4.0

if nota >= 5:
    print("Aprobado")
else:                                       # solo si nota >= 5 fue False
    print("Suspenso")
    print(f"Te faltan {5 - nota} puntos")   # 5 - 4.0 = 1.0
print("Fin del programa")

Con un 4.0 entra por el else:

Suspenso
Te faltan 1.0 puntos
Fin del programa

Comprobación a mano: 5 - nota es 5 - 4.0 = 1.0. Sale 1.0 y no 1 porque nota es un float, y una resta con un float da float (lo viste en operadores).

El else no lleva condición: se ejecuta exactamente cuando la del if ha dado False. Por eso un if/else siempre ejecuta uno y solo uno de sus dos bloques. Nunca los dos y nunca ninguno.

Escribirle una condición al else (else nota < 5:). Es un SyntaxError. Si necesitas otra condición, eso es un elif.

La estructura if/elif/else

Con dos caminos te basta if/else. Pero una nota no es solo «aprobado» o «suspenso»: tiene sobresaliente, notable, aprobado y suspenso. Para elegir entre más de dos caminos se usa elif, contracción de else if:

nota = 7.5

if nota >= 9:              # 1.ª pregunta: ¿7.5 >= 9? False, sigue
    calificacion = "Sobresaliente"
elif nota >= 7:            # 2.ª pregunta: ¿7.5 >= 7? True, entra y termina
    calificacion = "Notable"
elif nota >= 5:            # ya no se evalúa
    calificacion = "Aprobado"
else:                      # solo si todas las anteriores fueron False
    calificacion = "Suspenso"

print(f"{nota} → {calificacion}")

Salida:

7.5 → Notable

Esto es lo que hace Python con nota = 7.5, paso a paso:

PasoPreguntaResultado¿Qué hace?
1nota >= 9 → 7.5 >= 9FalseBaja al siguiente elif
2nota >= 7 → 7.5 >= 7TrueEjecuta su bloque: calificacion = "Notable"
3nota >= 5No se evalúaSalta al final de la estructura
4elseNo se evalúa—

El dibujo lo resume: Python baja por la escalera preguntando, y en cuanto una respuesta es True entra por esa puerta y sale de la estructura.

Recorrido de una cadena if/elif/elseCon nota 7.5, Python comprueba nota >= 9 (False), después nota >= 7 (True) y asigna Notable; nota >= 5 y else no se evalúan.nota = 7.5nota >= 9"Sobresaliente"Falsenota >= 7"Notable"Truenota >= 5"Aprobado"no se evalúaelse"Suspenso"no se evalúaprint(…) → 7.5 → Notable1. Pregunta de arriba abajo2. El primer True gana3. El resto se salta
Con nota = 7.5 solo se hacen dos preguntas: la segunda da True y Python salta al final sin mirar las demás.

Dos ideas que salen de esta tabla y que te van a ahorrar muchos fallos:

  1. Solo se ejecuta un bloque: el del primer True. Aunque 7.5 >= 5 también sea verdad, nadie se lo pregunta.
  2. Al llegar a un elif, ya sabes que todo lo de arriba fue False. Cuando Python llega a elif nota >= 7, ya sabe que la nota es menor que 9. Por eso no hace falta escribir elif nota >= 7 and nota < 9:: esa segunda mitad ya está garantizada. Los apuntes de FP1 insisten en esto: no vuelvas a comprobar lo que ya está comprobado.

Por qué importa el orden de los elif

Ahora vuelve al gancho. Mi clasificador preguntaba primero nota >= 5. Con un 9,2 esa pregunta ya da True, así que el programa asigna «Aprobado» y se va. Las preguntas de notable y sobresaliente están ahí, escritas, pero son inalcanzables: cualquier nota que las cumpla ya ha entrado antes por nota >= 5.

Por qué importa el orden de los elifDos rectas de notas de 0 a 10. Con el orden correcto, 9.2 cae en Sobresaliente. Con nota >= 5 primero, todo lo que va de 5 a 10 se queda en Aprobado.Orden correcto: de mayor a menor (t3)SuspensoAprobadoNotableSobresaliente012345678910nota = 9.2Orden del gancho: nota >= 5 primero (t0)SuspensoAprobado012345678910nota = 9.2Notable y Sobresaliente: nunca se alcanzan
Con nota >= 5 en primer lugar, todo el tramo de 5 a 10 se lo queda Aprobado: el 9.2 del gancho nunca llega a Sobresaliente.

Es el error más traicionero del tema, porque no da ningún error: el programa funciona, solo que mal. La regla para no caer:

Si comparas con…Ordena las condiciones…Ejemplo
>= o >De mayor a menor umbral>= 9, >= 7, >= 5, else
<= o <De menor a mayor umbral<= 12450, <= 20200, <= 35200…

La segunda fila la usarás en los ejercicios, con los tramos de un impuesto. La idea es la misma: la primera pregunta tiene que ser la más exigente, la que menos valores deja pasar.

elif es un else con un if dentro

Los apuntes de FP1 presentan elif como una abreviatura, y entenderlo así ayuda mucho. Este programa (el ejemplo de los apuntes, con datos fijos) clasifica un número en negativo, cero o positivo, y en par o impar:

num = -7

if num < 0:
    if num % 2 == 0:               # el resto entre 2 dice si es par
        print(num, "es un número negativo par")
    else:
        print(num, "es un número negativo impar")
elif num == 0:                     # elif = un else que solo contiene un if
    print(num, "es cero")
elif num % 2 == 0:                 # aquí ya sabemos que num es positivo
    print(num, "es un número positivo par")
else:
    print(num, "es un número positivo impar")

Salida:

-7 es un número negativo impar

Comprobación: -7 < 0 es True, así que entra en el primer bloque; -7 % 2 vale 1 en Python (el resto siempre tiene el signo del divisor), 1 == 0 es False y sale «impar». Los dos elif de abajo sustituyen a un else: que solo contenía otro if. Sin la contracción, ese código tendría un nivel más de sangría por cada caso. Fíjate también en el último elif num % 2 == 0: no pregunta si el número es positivo, porque si ha llegado hasta ahí ya no puede ser ni negativo ni cero.

Condicionales anidados

Puedes poner un if dentro de otro. Se llama anidar, y sirve cuando una pregunta solo tiene sentido si la anterior ha salido de una forma concreta. Por ejemplo, preguntar por el carnet de conducir solo tiene sentido si la persona es mayor de edad:

edad = 20
tiene_carnet = False

if edad >= 18:
    if tiene_carnet:                # 2.º nivel: solo se pregunta a los mayores de edad
        print("Puede conducir")
    else:
        print("Mayor de edad pero sin carnet")
else:
    print("Menor de edad, no puede conducir")

Con edad = 20 y tiene_carnet = False:

Mayor de edad pero sin carnet

El if tiene_carnet: está sangrado 4 espacios más que el primero, así que solo se evalúa cuando edad >= 18 ha dado True. Y su else es el del if interior porque está a su misma altura. Esa regla (un else se empareja con el if que tiene su misma sangría) es la que provoca uno de los fallos de los ejercicios, así que quédate con ella.

Lo mismo se puede escribir sin anidar, combinando las dos condiciones con and:

edad = 20
tiene_carnet = False

if edad >= 18 and tiene_carnet:     # las dos condiciones a la vez
    print("Puede conducir")
elif edad >= 18:                    # aquí ya sabemos que NO tiene carnet
    print("Mayor de edad pero sin carnet")
else:
    print("Menor de edad, no puede conducir")

La salida es idéntica:

Mayor de edad pero sin carnet

En el elif edad >= 18 no hace falta añadir and not tiene_carnet: si llegamos ahí, la primera condición falló, y como edad >= 18 es True, lo que falló tuvo que ser el carnet.

SituaciónMejor anidarMejor combinar con and/or
La segunda pregunta solo tiene sentido si la primera es TrueSí—
Cada combinación da un mensaje distinto (4 casos o más)Sí, se lee mejorSe vuelve una cadena muy larga
Solo te importa «se cumplen las dos» o «no»—Sí: una línea en vez de cuatro
Vas por el tercer nivel de sangríaSeñal de alarmaPrueba a combinar o a reordenar

Si te encuentras escribiendo un if dentro de un if dentro de otro if, para un momento. Casi siempre hay una forma de aplanarlo con and o con un elif bien ordenado, y el código se lee de un vistazo.

and, or y not: varias condiciones a la vez

Ya los viste en el tema de operadores, pero dentro de un if es donde más daño hacen cuando se confunden. Imagina que alguien teclea mal una nota y escribe 12. Queremos detectar que está fuera del rango de 0 a 10:

nota = 12          # un dato mal tecleado: las notas van de 0 a 10

# MAL: con or basta con que UNA sea True, y 12 >= 0 ya lo es
if nota >= 0 or nota <= 10:
    print("or  → nota válida")

# BIEN: con and tienen que cumplirse LAS DOS
if nota >= 0 and nota <= 10:
    print("and → nota válida")
else:
    print("and → nota fuera de rango")

# Lo mismo, más corto: comparación encadenada
if 0 <= nota <= 10:
    print("encadenada → nota válida")
else:
    print("encadenada → nota fuera de rango")

Salida:

or  → nota válida
and → nota fuera de rango
encadenada → nota fuera de rango

La versión con or da la nota por buena, y no porque Python esté roto. Con or basta con que una de las dos partes sea True: 12 >= 0 ya lo es, así que la segunda ni importa. Es más: con or, esa condición acepta cualquier número, porque todo número es mayor o igual que 0 o menor o igual que 10 (o las dos cosas). El dibujo lo enseña sobre la recta:

and frente a or sobre la recta de notasCuatro bandas sobre una recta de -2 a 12. nota >= 0 cubre desde 0, nota <= 10 hasta 10, and solo de 0 a 10 y or cubre toda la recta, así que 12 pasa con or.nota >= 0True con 12nota <= 10False con 12nota >= 0 and nota <= 10False con 12nota >= 0 or nota <= 10True con 12-2024681012nota = 12
and se queda con la parte común (de 0 a 10); or con todo lo que cubra cualquiera de las dos, que es toda la recta: el 12 pasa.
ABA and BA or Bnot A
TrueTrueTrueTrueFalse
TrueFalseFalseTrueFalse
FalseTrueFalseTrueTrue
FalseFalseFalseFalseTrue

La tercera forma del programa, 0 <= nota <= 10, es una comparación encadenada. Python la lee como 0 <= nota and nota <= 10, pero se parece mucho más a cómo lo escribirías en mates. Para comprobar rangos, es la forma más clara y la que menos se presta a equivocarse.

and y or se paran en cuanto saben la respuesta

and y or no evalúan siempre las dos partes. Si la primera parte de un and es False, el resultado ya es False haga lo que haga la segunda, y Python no la mira. Esto se llama evaluación en cortocircuito, y se puede usar a propósito para proteger una operación peligrosa:

entregas = 0
puntos = 0

# and se para en cuanto encuentra un False: con 0 entregas no llega a dividir
if entregas > 0 and puntos / entregas >= 5:
    print("Media aprobada")
else:
    print("Sin entregas o media suspensa")

print(puntos / entregas)    # sin la protección del and...

Salida:

Sin entregas o media suspensa
Traceback (most recent call last):
  File "cortocircuito.py", line 10, in <module>
    print(puntos / entregas)    # sin la protección del and...
          ~~~~~~~^~~~~~~~~~
ZeroDivisionError: division by zero

Con entregas = 0, entregas > 0 da False y el and se para: la división puntos / entregas nunca se calcula y el programa entra por el else. En cambio, la última línea divide sin protección y el programa revienta con ZeroDivisionError. El orden dentro del and importa: primero la comprobación que protege, después la operación que necesita esa protección.

La trampa de or con un texto suelto

Este es el error de or más típico de primero. Quieres aceptar «s» y «S» como respuesta afirmativa y escribes lo que dirías en voz alta:

opcion = "n"

# Parece "si opcion es s o S", pero Python lee (opcion == "s") or ("S")
if opcion == "s" or "S":
    print("Entra aunque opcion vale 'n'")

print(opcion == "s" or "S")     # el or devuelve "S", que dentro de un if es True

# BIEN: compara las dos veces, o pasa a minúsculas y compara una
if opcion == "s" or opcion == "S":
    print("No entra")
if opcion.lower() == "s":
    print("Tampoco entra")
print("Fin")

Salida:

Entra aunque opcion vale 'n'
S
Fin

Con opcion = "n" entra igualmente. El motivo es la forma en que Python agrupa: opcion == "s" or "S" se lee como (opcion == "s") or ("S"). La primera parte es False, así que el or devuelve la segunda, "S", que es un texto no vacío y dentro de un if cuenta como verdadero (lo explico en la sección siguiente). La línea print(opcion == "s" or "S") lo demuestra: imprime S, no True ni False.

if opcion == "s" or "S": siempre entra. Cada lado del or tiene que ser una comparación completa: opcion == "s" or opcion == "S". O mejor: normaliza con opcion.lower() == "s" y compara una sola vez.

Verdadero y falso sin comparar: truthy y falsy

Dentro de un if puedes poner cualquier valor, no solo True o False. Python lo convierte a booleano con las mismas reglas que la función bool():

# bool() enseña cómo ve Python cada valor dentro de un if
print(bool(0), bool(0.0), bool(""), bool([]))              # cero o vacío → False
print(bool(7), bool(-1), bool("0"), bool(" "), bool([0]))  # todo lo demás → True

entregas = []                  # todavía no ha entregado nada
if entregas:                   # una lista vacía cuenta como False
    print("Tiene entregas")
else:
    print("Lista vacía: sin entregas")

comentario = "0"               # ojo: es un texto, no el número 0
if comentario:
    print("El texto '0' cuenta como True")

Salida:

False False False False
True True True True True
Lista vacía: sin entregas
El texto '0' cuenta como True

La regla es corta: cero y vacío son falsos; todo lo demás es verdadero. Los valores que se comportan como False se llaman falsy, y los que se comportan como True, truthy.

Valorbool(valor)¿Por qué?
0, 0.0FalseEs cero
""FalseTexto vacío
[]FalseLista vacía
7, -1TrueDistinto de cero (también los negativos)
"0", " "TrueSon textos con un carácter: no están vacíos
[0]TrueLa lista tiene un elemento, aunque ese elemento sea 0

Por eso if entregas: es la forma natural de preguntar «¿hay alguna entrega?». Y por eso el texto "0" cuenta como verdadero: no es el número cero, es un texto de un carácter. Ojo con esto cuando leas números con input(), que siempre devuelve texto.

En FP1 verás mucho if lista: o if not nombre:. No es una abreviatura rara: es Python preguntando «¿tiene algo dentro?». Si te cuesta leerlo, tradúcelo mentalmente a if len(lista) > 0:.

El operador ternario — condicional en una línea

Cuando un if/else solo sirve para elegir un valor entre dos, Python permite escribirlo en una línea. Se llama operador ternario o expresión condicional:

nota = 6.0
resultado = "Aprobado" if nota >= 5 else "Suspenso"   # valor_si_True if condición else valor_si_False
print(resultado)

entregas = 1
print(f"Llevas {entregas} {'entrega' if entregas == 1 else 'entregas'}")

Salida:

Aprobado
Llevas 1 entrega

Se lee casi en castellano: "Aprobado" if nota >= 5 else "Suspenso" es «Aprobado si la nota es mayor o igual que 5; si no, Suspenso». El orden es valor si True, if condición, else valor si False. El segundo ejemplo lo usa dentro de un f-string para elegir entre «entrega» y «entregas»: con entregas = 1 sale el singular.

Úsalo para elegir valores sencillos. Si dentro del ternario empiezas a meter otro ternario o una condición con tres and, vuelve al if/else de siempre: ocupa más líneas, pero se entiende.

¿Cuándo uso cada estructura?

Necesitas…UsaEjemplo
Hacer algo solo si se cumple una condiciónifAvisar si la nota es menor que 5
Elegir entre dos caminosif / elseAprobado o suspenso
Elegir uno entre varios caminos excluyentesif / elif / elseSobresaliente, notable, aprobado, suspenso
Comprobar varias cosas independientesVarios if seguidosValidar usuario, edad y contraseña de un registro
Una pregunta que depende de otraif anidadoCarnet solo si es mayor de edad
Elegir un valor en una líneaTernario"error" if n == 1 else "errores"

La cuarta fila es la clave de la práctica: una cadena if/elif se para en el primer True, así que si quieres revisar todos los campos de un formulario necesitas un if por campo. Lo vas a ver con un validador de registro real.

Los errores más comunes con if, elif y else

Error 1 — Olvidar los dos puntos

nota = 7
if nota >= 5
    print("Aprobado")

Python ni siquiera empieza a ejecutar el programa. Este es el mensaje real:

  File "sin_dos_puntos.py", line 2
    if nota >= 5
                ^
SyntaxError: expected ':'

Las versiones recientes de Python te dicen exactamente lo que falta (expected ':') y señalan con ^ el final de la línea. Lee siempre la última línea del error: es la que más ayuda.

Error 2 — Usar = en vez de ==

nota = 5
if nota = 5:
    print("Cinco")

Error real:

  File "igual.py", line 2
    if nota = 5:
       ^^^^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?

= asigna y == compara. Dentro de un if siempre quieres comparar, y Python incluso te sugiere el arreglo: Maybe you meant ‘==’.

Error 3 — Indentación incorrecta

nota = 7
if nota >= 5:
print("Aprobado")

Error real:

  File "sangria.py", line 3
    print("Aprobado")
    ^^^^^
IndentationError: expected an indented block after 'if' statement on line 2

Después de los dos puntos Python espera un bloque sangrado. Si la siguiente línea está a la misma altura que el if, no hay bloque y salta un IndentationError.

Error 4 — El orden de los elif importa

Es el del gancho: con nota >= 5 en primer lugar, el 9,2 sale «Aprobado». No hay mensaje de error que te avise; solo una salida que no cuadra. La solución es ordenar de la condición más exigente a la menos exigente.

Probar un clasificador solo con notas «normales». Prueba siempre los extremos y los límites: 0, 4.99, 5, 7, 9, 9.2 y 10. El error del orden solo se ve con notas altas.

Error 5 — or con un texto suelto

if opcion == "s" or "S": siempre es verdadero, porque "S" por sí solo es truthy. Cada lado del or necesita su comparación completa.

Míralo paso a paso en Python Tutor

pythontutor.com ejecuta tu código línea a línea y te enseña qué línea va a ejecutarse y qué valor tiene cada variable en cada momento. Con los condicionales es oro: ves con tus ojos qué ramas se saltan. Elige Python 3, pega este programa (es el ejemplo guía de las notas: el examen pesa un 60 %, las prácticas un 40 % y hay que sacar al menos un 4 en el examen para hacer media) y pulsa Visualize Execution:

nota_examen = 6.5
nota_practicas = 8.0

if nota_examen >= 4:                     # requisito: al menos un 4 en el examen
    final = 0.6 * nota_examen + 0.4 * nota_practicas
    if final >= 9:
        calificacion = "Sobresaliente"
    elif final >= 7:
        calificacion = "Notable"
    elif final >= 5:
        calificacion = "Aprobado"
    else:
        calificacion = "Suspenso"
else:                                    # sin el 4 no se hace media
    final = nota_examen
    calificacion = "Suspenso (examen < 4)"

print(round(final, 2), calificacion)

Al final debería salir:

7.1 Notable

Las cuentas: 0.6 × 6.5 = 3.9 y 0.4 × 8.0 = 3.2, que suman 7.1. El round(final, 2) es por precaución: las cuentas con decimales a veces dejan colas raras (prueba 0.1 + 0.2 en la consola y verás 0.30000000000000004), y con otras notas podría aparecer una.

Qué observar paso a paso:

  1. En el paso del primer if, la flecha pasa de if nota_examen >= 4: a la línea de final: la condición dio True y entra en el bloque.
  2. Cuando aparece final en el panel de variables, comprueba que vale 7.1: es la cuenta que acabamos de hacer a mano, guardada antes de que la cadena de calificaciones la mire.
  3. En la cadena interior, la flecha se para en if final >= 9 y en elif final >= 7, y salta directa al print. Las líneas de «Aprobado», «Suspenso» y todo el else exterior no se pisan nunca.
  4. Cambia nota_examen a 3.5 y vuelve a ejecutar: ahora la flecha salta del primer if directamente al else de abajo, y la cadena de calificaciones ni se visita.

Resumen

ConceptoQué haceDetalle que se olvida
ifEjecuta un bloque si la condición es TrueDos puntos y 4 espacios de sangría
elseBloque para cuando la condición es FalseNo lleva condición
elifOtra condición si las anteriores fallaronSolo se ejecuta el primer True
Orden de los elifDecide qué rama gana>= de mayor a menor; <= de menor a mayor
Anidarif dentro de ifEl else se empareja por la sangría
and / or / notCombinan condicionesor con rangos suele aceptar todo
Truthy / falsyCualquier valor sirve de condiciónCero y vacío son False; "0" es True
Ternarioa if condición else bSolo para elegir valores sencillos

Tres ideas para llevarte:

  1. En una cadena if/elif/else se ejecuta un solo bloque: el del primer True. Por eso el orden lo es todo.
  2. Para comprobar varias cosas independientes, usa varios if, no una cadena de elif.
  3. Cada lado de un and o un or es una condición completa. 0 <= nota <= 10 para rangos, y nada de x == "a" or "b".

Ahora toca escribir código: en la práctica de condicionales en Python montamos un validador de registro, un sistema de descuentos y un clasificador de notas con menú. Y cuando quieras repetir una decisión muchas veces (corregir las notas de toda la clase, por ejemplo), te esperan los bucles en Python.

Siguiente paso: prácticaCondicionales en Python — práctica con un validador de registro, descuentos por nivel y un clasificador de notas (y el formulario que solo te enseñaba un error)

¿Te ha servido este artículo? Así puedes apoyar SergioLearns →

Sigue aprendiendo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *