Aprende leyendo en orden

Problemas de cierre de Sintaxis de Python — Combina control de flujo, funciones y excepciones

Tres ejercicios de repaso del capítulo de sintaxis: filtrar y elevar al cuadrado con comprensión, safe_divide con try / except y el decorador @double que duplica el retorno.

Problema 1: Filtrar y transformar con una comprensión

Combina un filtro if dentro de una comprensión de lista con el operador de potencia `. Selecciona solo los elementos que cumplen una condición y conviértelos en algo nuevo**: ese es el uso típico de las comprensiones.

Los 3 pasos de una comprensión
range(1, 16)1 a 15if n % 3 == 0or n % 5 == 03 / 5 / 6 / 9 / 10 / 12 / 15n ** 2eleva al cuadrado[9, 25, 36, 81,100, 144, 225]filtrar con if** 2como lista
Construye una nueva lista en tres etapas: iterar → filtrar → transformar.

De los números del 1 al 15, extrae los múltiplos de 3 o 5, recoge sus cuadrados en una lista e imprímela.

Una comprensión de lista de una sola línea es suficiente.

Editor Python

Ejecutar el código para ver el resultado

Problema 2: Construir una función de división segura con try / except

Escribe safe_divide(a, b) para que no se rompa con un divisor cero. Esto reúne def para definir una función, try / except para capturar una excepción y el uso de return para devolver valores distintos según lo que pasó.

Cómo try / except enruta la llamada
safe_divide(a, b)llamadatry:return a / bÉxito5.0except:print + return NoneAnte errorNoneéxitodivisor cero
Si todo va bien, el valor se devuelve dentro de try. Ante un error, el control salta al bloque except que coincide.

Escribe una función safe_divide que reciba dos números a y b. Normalmente debe devolver a / b, pero no permitas que un error de división por cero rompa el programa: cuando ocurra, imprime "División por cero no permitida" y devuelve None en su lugar.

Llama a safe_divide(10, 2) y safe_divide(10, 0) en orden y haz print() de cada valor de retorno para verificar.

Editor Python

Ejecutar el código para ver el resultado

Problema 3: Modificar el valor de retorno de una función con un decorador

Construye un decorador @double que duplique lo que devuelva la función decorada, sin tocar el cuerpo de la función. Esto te obliga a escribir el patrón de decorador en sí: una función que recibe una función y devuelve una nueva función.

Cómo se conecta un decorador
def add(a, b):return a + b@double= double(add)wrapper(*args)= add(*args) * 2add(3, 5) → 16(8 duplicado)envolverdevuelve wrapperllamada
Un decorador es una función que recibe una función y devuelve una nueva. @double equivale a add = double(add).

Escribe un decorador double que duplique el valor de retorno de cualquier función a la que se aplique.

Luego aplica double a una función simple add(a, b) que devuelva a + b, llama a add(3, 5) y muestra el resultado con print(). Si el decorador está bien conectado, el resultado deberá diferir de una suma simple.

Editor Python

Ejecutar el código para ver el resultado

¡Buen trabajo llegando hasta aquí!

Con esto cierras Sintaxis de Python. Has cubierto el control de flujo con condicionales, bucles y excepciones, las definiciones de funciones con def / lambda, las comprensiones, las funciones de orden superior, los decoradores y los generadores: prácticamente todas las herramientas que necesitas para dirigir un programa. Ahora puedes escribir por tu cuenta funciones que toman valores, los transforman y devuelven un resultado.

El siguiente capítulo, Programación orientada a objetos en Python, trata de definir tus propios tipos: escribir class, configurar constructores con __init__, herencia, polimorfismo, encapsulación, métodos especiales como __add__, gestores de contexto con with y type hints. Es la forma de juntar datos y comportamiento en un único diseño.