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.
Tabla de Contenidos
¿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 delifson obligatorios. Sin ellos,SyntaxError. - La sangría (4 espacios) marca el bloque. Todas las líneas con la misma sangría debajo del
ifle pertenecen. - La primera línea sin sangría cierra el bloque y se ejecuta siempre.
| Línea | ¿Es del if? | Con 7.5 | Con 4.0 |
|---|---|---|---|
print("Aprobado") | Sí (4 espacios) | Se ejecuta | Se salta |
print("¡A por la siguiente!") | Sí (4 espacios) | Se ejecuta | Se salta |
print("Fin del programa") | No (0 espacios) | Se ejecuta | Se 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:
| Paso | Pregunta | Resultado | ¿Qué hace? |
|---|---|---|---|
| 1 | nota >= 9 → 7.5 >= 9 | False | Baja al siguiente elif |
| 2 | nota >= 7 → 7.5 >= 7 | True | Ejecuta su bloque: calificacion = "Notable" |
| 3 | nota >= 5 | No se evalúa | Salta al final de la estructura |
| 4 | else | No 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.
Dos ideas que salen de esta tabla y que te van a ahorrar muchos fallos:
- Solo se ejecuta un bloque: el del primer
True. Aunque7.5 >= 5también sea verdad, nadie se lo pregunta. - Al llegar a un
elif, ya sabes que todo lo de arriba fueFalse. Cuando Python llega aelif nota >= 7, ya sabe que la nota es menor que 9. Por eso no hace falta escribirelif 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.
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ón | Mejor anidar | Mejor combinar con and/or |
|---|---|---|
La segunda pregunta solo tiene sentido si la primera es True | Sí | — |
| Cada combinación da un mensaje distinto (4 casos o más) | Sí, se lee mejor | Se 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ía | Señal de alarma | Prueba 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:
| A | B | A and B | A or B | not A |
|---|---|---|---|---|
True | True | True | True | False |
True | False | False | True | False |
False | True | False | True | True |
False | False | False | False | True |
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.
| Valor | bool(valor) | ¿Por qué? |
|---|---|---|
0, 0.0 | False | Es cero |
"" | False | Texto vacío |
[] | False | Lista vacía |
7, -1 | True | Distinto de cero (también los negativos) |
"0", " " | True | Son textos con un carácter: no están vacíos |
[0] | True | La 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… | Usa | Ejemplo |
|---|---|---|
| Hacer algo solo si se cumple una condición | if | Avisar si la nota es menor que 5 |
| Elegir entre dos caminos | if / else | Aprobado o suspenso |
| Elegir uno entre varios caminos excluyentes | if / elif / else | Sobresaliente, notable, aprobado, suspenso |
| Comprobar varias cosas independientes | Varios if seguidos | Validar usuario, edad y contraseña de un registro |
| Una pregunta que depende de otra | if anidado | Carnet solo si es mayor de edad |
| Elegir un valor en una línea | Ternario | "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:
- En el paso del primer
if, la flecha pasa deif nota_examen >= 4:a la línea definal: la condición dioTruey entra en el bloque. - Cuando aparece
finalen el panel de variables, comprueba que vale7.1: es la cuenta que acabamos de hacer a mano, guardada antes de que la cadena de calificaciones la mire. - En la cadena interior, la flecha se para en
if final >= 9y enelif final >= 7, y salta directa alprint. Las líneas de «Aprobado», «Suspenso» y todo elelseexterior no se pisan nunca. - Cambia
nota_examena3.5y vuelve a ejecutar: ahora la flecha salta del primerifdirectamente alelsede abajo, y la cadena de calificaciones ni se visita.
Resumen
| Concepto | Qué hace | Detalle que se olvida |
|---|---|---|
if | Ejecuta un bloque si la condición es True | Dos puntos y 4 espacios de sangría |
else | Bloque para cuando la condición es False | No lleva condición |
elif | Otra condición si las anteriores fallaron | Solo se ejecuta el primer True |
Orden de los elif | Decide qué rama gana | >= de mayor a menor; <= de menor a mayor |
| Anidar | if dentro de if | El else se empareja por la sangría |
and / or / not | Combinan condiciones | or con rangos suele aceptar todo |
| Truthy / falsy | Cualquier valor sirve de condición | Cero y vacío son False; "0" es True |
| Ternario | a if condición else b | Solo para elegir valores sencillos |
Tres ideas para llevarte:
- En una cadena
if/elif/elsese ejecuta un solo bloque: el del primerTrue. Por eso el orden lo es todo. - Para comprobar varias cosas independientes, usa varios
if, no una cadena deelif. - Cada lado de un
ando unores una condición completa.0 <= nota <= 10para rangos, y nada dex == "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 →




Qué es un sistema operativo — teoría con tu portátil en una tarde de estudio, una llamada a write() y la CPU que nunca descansa (y los tres programas que no se ejecutaban a la vez)