edubun
Español

Tomar decisiones con if

Python revisa if y cada elif desde arriba y ejecuta solo la primera rama cuya condición es True; las demás se saltan.

Un precio de entrada que depende de la edad

Aquí hay un problema para probar antes de ver sintaxis nueva. Un pequeño museo de ciencias (inventado para este ejemplo) no cobra nada a los niños menores de 7 años, cobra 3000 wones de los 7 a los 18 años y 5000 wones a todos los demás. Dada una edad, el programa debe imprimir el precio. Escribe primero la regla con palabras, como una lista de preguntas en el orden en que las harías en la taquilla.

Probablemente escribiste algo así: ¿el visitante es menor de 7 años? Si es así, es gratis, y se acaba. Si no, ¿tiene 18 años o menos? Si es así, 3000 wones, y se acaba. Si no, 5000 wones. Eso ya es el programa. Python escribe «si», «si no, si» y «si no» como if, elif y else.

age = 12
if age < 7:
    price = 0
elif age <= 18:
    price = 3000
else:
    price = 5000
print(price)
Salida
3000

Importan tres detalles de la sintaxis. Cada línea de condición termina con dos puntos. Las líneas que pertenecen a una rama van con sangría, y el tutorial de Python recomienda cuatro espacios. Cuando termina la sangría, termina la rama, y por eso print(price) se ejecuta sea cual sea la edad. Y solo se ejecuta una rama: para la edad 12, la primera condición es False, la segunda es True, así que price pasa a ser 3000 y el else ni se mira.

Las comparaciones dan True o False

OperadorSignificadoEjemploResultado
==igual a5 == 5True
!=distinto de5 != 5False
<menor que3 < 7True
<=menor o igual que7 <= 7True
>mayor que3 > 7False
>=mayor o igual que18 >= 19False

Fíjate en el doble signo igual. Un = asigna un valor, dos == comparan. También se pueden comparar cadenas: "kimchi" == "Kimchi" es False, porque las mayúsculas cuentan como caracteres distintos.

El orden de las líneas elif cambia la respuesta

Como Python se detiene en la primera condición True, el orden de las ramas importa. Calificar una nota es el caso clásico. Comprueba primero 90 o más, luego 80, luego 70. Si pones primero la comprobación de 70, una nota de 95 la cumple y recibe una C, porque 95 >= 70 también es True.

Una cadena if/elif/else es una escalera. Python baja hasta que una condición es True, ejecuta esa rama y salta el resto.
score = 95
if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"
elif score >= 70:
    grade = "C"
else:
    grade = "D"
print(grade)
Salida
A

and, or y not unen condiciones

and es True solo cuando los dos lados son True. or es True cuando al menos un lado lo es. not invierte True y False. Una condición como «entre 13 y 18» puede escribirse age >= 13 and age <= 18, o en la forma más corta de Python 13 <= age <= 18. Una condición también puede estar dentro de otra rama, lo que se llama anidamiento. El currículo coreano de informática de secundaria nombra ambas cosas, las operaciones lógicas y las estructuras de control anidadas, en uno de sus estándares de programación.

age = 15
has_ticket = True
if 13 <= age <= 18 and has_ticket:
    print("Teen entry")
if not has_ticket or age < 7:
    print("See the desk")
else:
    print("Go in")
Salida
Teen entry
Go in
ifEjecuta las líneas con sangría solo cuando la condición es True
elif«Si no, si»: se comprueba solo cuando todo lo anterior fue False
elseSe ejecuta cuando ninguna condición anterior fue True
==Compara dos valores; = asigna
and / or / notAmbas verdaderas / al menos una verdadera / lo contrario
sangríaCuatro espacios que marcan qué líneas pertenecen a una rama
  1. ¿Qué imprime esto?
    x = 8
    if x > 5:
        print("big")
    else:
        print("small")
  2. ¿Qué imprime esto?
    age = 7
    if age < 7:
        print("free")
    elif age <= 18:
        print("3000")
    else:
        print("5000")
  3. ¿Qué imprime esto?
    score = 85
    if score >= 70:
        print("C")
    elif score >= 80:
        print("B")
  4. ¿Qué imprime esto?
    x = 3
    if x > 5:
        print("A")
    print("B")
    • A
      B
    • B
    • A
    • (nada)
  5. ¿Qué imprime esto?
    print(5 == 5.0, "a" == "A")
  6. ¿Qué imprime esto?
    t = 30
    print(t > 25 and t < 28)
  7. ¿Qué imprime esto?
    rain = False
    print(not rain)
  8. ¿Qué imprime esto?
    n = 14
    if n % 2 == 0:
        if n > 10:
            print("big even")
        else:
            print("small even")
    else:
        print("odd")
  9. ¿Qué línea comprueba correctamente si x es 10?
    • if x = 10:
    • if x == 10:
    • if x == 10
    • if (x = 10)
  10. Pon las líneas en orden para que el programa imprima "Even".
    Salida
    Even
Errores frecuentes
  • «if score = 90: comprueba si score es 90». Un = es una asignación. Python se detiene con SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? Escribe if score == 90:.
  • «if answer == "yes" or "y": captura las dos respuestas». Python lo lee como (answer == "yes") or ("y"), y una cadena no vacía como "y" cuenta como verdadera, así que la condición siempre es verdadera. Escribe answer == "yes" or answer == "y".
  • «La sangría es solo por estética». En Python decide qué líneas pertenecen a la rama. Olvidarla detiene el programa con IndentationError: expected an indented block after 'if' statement on line 2.
Nota para docentesEmpezar por la taquilla funciona porque los estudiantes ya conocen la decisión; lo único nuevo es cómo se escribe. Pídeles que digan la regla en voz alta, en orden, antes de teclear. Vale la pena ejecutar a propósito el programa de calificaciones con el orden equivocado: imprime C para 85 sin ningún error, un primer contacto con un error de lógica. Al revisar el trabajo, prueba los valores límite (6, 7, 18, 19 en el problema de la entrada), porque ahí se esconden los errores por uno entre < y <=. El currículo coreano de informática de secundaria tiene un estándar sobre operaciones lógicas y estructuras de control anidadas.
Ideas clave
  • if / elif / else: solo se ejecuta la primera rama True.
  • Las líneas de condición terminan en :, y la rama lleva sangría de cuatro espacios.
  • == compara; = asigna.
  • Pon primero la condición más estricta en una cadena de elif.
  • and, or y not combinan condiciones.
Fuentes de este curso (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

Fecha de consulta: 2026-10-19