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)3000Importan 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
| Operador | Significado | Ejemplo | Resultado |
|---|---|---|---|
| == | igual a | 5 == 5 | True |
| != | distinto de | 5 != 5 | False |
| < | menor que | 3 < 7 | True |
| <= | menor o igual que | 7 <= 7 | True |
| > | mayor que | 3 > 7 | False |
| >= | mayor o igual que | 18 >= 19 | False |
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.
score = 95
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
else:
grade = "D"
print(grade)Aand, 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")Teen entry
Go in| if | Ejecuta 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 |
| else | Se ejecuta cuando ninguna condición anterior fue True |
| == | Compara dos valores; = asigna |
| and / or / not | Ambas verdaderas / al menos una verdadera / lo contrario |
| sangría | Cuatro espacios que marcan qué líneas pertenecen a una rama |
- ¿Qué imprime esto?
x = 8 if x > 5: print("big") else: print("small") - ¿Qué imprime esto?
age = 7 if age < 7: print("free") elif age <= 18: print("3000") else: print("5000") - ¿Qué imprime esto?
score = 85 if score >= 70: print("C") elif score >= 80: print("B") - ¿Qué imprime esto?
x = 3 if x > 5: print("A") print("B")A
BBA(nada)
- ¿Qué imprime esto?
print(5 == 5.0, "a" == "A") - ¿Qué imprime esto?
t = 30 print(t > 25 and t < 28) - ¿Qué imprime esto?
rain = False print(not rain) - ¿Qué imprime esto?
n = 14 if n % 2 == 0: if n > 10: print("big even") else: print("small even") else: print("odd") - ¿Qué línea comprueba correctamente si x es 10?
- if x = 10:
- if x == 10:
- if x == 10
- if (x = 10)
- Pon las líneas en orden para que el programa imprima "Even".Salida
Even
- «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.
- 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