martes, 25 de febrero de 2025

馃憠 Ejercicios Pr谩cticos de Python: Manejo de Excepciones y Errores

Despu茅s de aprender a manejar errores y excepciones en Python, es hora de practicar con ejercicios reales y 煤tiles.

Hoy resolveremos ejercicios sobre:
✔️ Uso de try-except para manejar errores
✔️ Captura de errores espec铆ficos (ValueError, ZeroDivisionError, etc.)
✔️ Uso de finally para cerrar recursos
✔️ Creaci贸n de excepciones personalizadas

馃搶 Cada ejercicio incluye el c贸digo, explicaci贸n y prueba de salida.


1️⃣ Ejercicio: Evitar Fallos al Ingresar un N煤mero

馃搷 Objetivo: Crear un programa que solicite un n煤mero al usuario y maneje el error si introduce un texto.

馃敼 C贸digo:

while True: try: numero = int(input("Introduce un n煤mero: ")) print(f"El doble de {numero} es {numero * 2}") break # Salir del bucle si la entrada es correcta except ValueError: print("❌ Error: Debes ingresar un n煤mero v谩lido. Int茅ntalo de nuevo.")

Se usa un bucle while True para repetir hasta que la entrada sea v谩lida.
try-except evita que el programa se bloquee si el usuario introduce un texto.

馃搶 Ejemplo de salida:

Introduce un n煤mero: hola ❌ Error: Debes ingresar un n煤mero v谩lido. Int茅ntalo de nuevo. Introduce un n煤mero: 5 El doble de 5 es 10

2️⃣ Ejercicio: Manejo de Divisi贸n por Cero

馃搷 Objetivo: Escribir un programa que divida dos n煤meros y maneje el error si el denominador es 0.

馃敼 C贸digo:

try: num1 = int(input("Introduce el numerador: ")) num2 = int(input("Introduce el denominador: ")) resultado = num1 / num2 print(f"Resultado: {resultado}") except ZeroDivisionError: print("❌ Error: No puedes dividir por cero.") except ValueError: print("❌ Error: Debes ingresar n煤meros v谩lidos.")

ZeroDivisionError se usa para capturar intentos de divisi贸n por 0.
ValueError captura errores cuando se ingresan caracteres en lugar de n煤meros.

馃搶 Ejemplo de salida:

Introduce el numerador: 10 Introduce el denominador: 0 Error: No puedes dividir por cero.

3️⃣ Ejercicio: Controlar Acceso a una Lista

馃搷 Objetivo: Escribir un programa que acceda a un 铆ndice de una lista y maneje errores de 铆ndice fuera de rango.

馃敼 C贸digo:

numeros = [10, 20, 30, 40, 50] try: indice = int(input("Introduce un 铆ndice (0-4): ")) print(f"El valor en la posici贸n {indice} es {numeros[indice]}") except IndexError: print("❌ Error: 脥ndice fuera de rango. Debes elegir entre 0 y 4.") except ValueError: print("❌ Error: Ingresa un n煤mero v谩lido.")

馃搶 Ejemplo de salida:

Introduce un 铆ndice (0-4): 6Error: 脥ndice fuera de rango. Debes elegir entre 0 y 4.

4️⃣ Ejercicio: Uso de finally para Cerrar Recursos

馃搷 Objetivo: Leer un archivo y asegurarse de cerrarlo correctamente con finally.

馃敼 C贸digo:

try: archivo = open("datos.txt", "r") contenido = archivo.read() print(contenido) except FileNotFoundError: print("❌ Error: El archivo no existe.") finally: print("馃搶 Operaci贸n finalizada.")

馃搶 Si el archivo datos.txt no existe, el programa mostrar谩:

Error: El archivo no existe. 馃搶 Operaci贸n finalizada.

finally asegura que siempre se cierre el archivo, incluso si hay un error.


5️⃣ Ejercicio: Crear una Excepci贸n Personalizada

馃搷 Objetivo: Definir una excepci贸n personalizada para validar edades.

馃敼 C贸digo:

class EdadInvalidaError(Exception): pass def verificar_edad(edad): if edad < 18: raise EdadInvalidaError("❌ Error: Debes ser mayor de edad.") print("✅ Acceso permitido.") try: edad = int(input("Introduce tu edad: ")) verificar_edad(edad) except EdadInvalidaError as e: print(e) except ValueError: print("❌ Error: Ingresa un n煤mero v谩lido.")

馃搶 Si el usuario ingresa una edad menor a 18:

Introduce tu edad: 15 Error: Debes ser mayor de edad.

raise lanza una excepci贸n personalizada.


馃殌 Conclusi贸n

✅ Hoy hemos resuelto ejercicios con manejo de excepciones en Python.
✅ Estos ejercicios ayudan a evitar que el programa se bloquee con errores inesperados.
✅ Practica modificando el c贸digo para entenderlo mejor.

馃搶 Pr贸ximo post: M谩s ejercicios avanzados con manejo de archivos y bases de datos en Python.

馃搨 Descarga los ejercicios en mi GitHub: github.com/josecodetech

馃帴 Aprende con mis videos en YouTube: https://www.youtube.com/@josecodetech/

馃挰 ¿Has tenido errores inesperados en Python? Comparte tu experiencia en los comentarios.



domingo, 23 de febrero de 2025

馃憠 Manejo de Excepciones y Errores en Python: C贸mo Evitar Fallos en tu C贸digo

A medida que escribimos c贸digo m谩s complejo, es inevitable que aparezcan errores. En lugar de dejar que nuestro programa se bloquee, podemos manejar estos errores de manera controlada usando excepciones en Python.

Hoy aprender谩s:
✔️ ¿Qu茅 son las excepciones y por qu茅 manejarlas?
✔️ C贸mo usar try, except, finally
✔️ Capturar errores espec铆ficos en Python
✔️ Crear nuestras propias excepciones
✔️ Ejemplo pr谩ctico explicando su uso


1️⃣ ¿Qu茅 son las Excepciones en Python?

Una excepci贸n es un error que ocurre mientras el programa se est谩 ejecutando. Si no manejamos las excepciones, el programa se detendr谩 abruptamente.

馃搶 Ejemplo de error sin manejo de excepciones:

numero = int(input("Introduce un n煤mero: ")) print(f"El doble es: {numero * 2}")

馃搶 Si el usuario introduce un texto en lugar de un n煤mero, el programa mostrar谩 un error:

ValueError: invalid literal for int() with base 10

Para evitar que el programa se bloquee, usamos try y except.


2️⃣ C贸mo Usar try y except para Manejar Errores

El bloque try intenta ejecutar el c贸digo y, si ocurre un error, el bloque except lo captura y muestra un mensaje en lugar de interrumpir el programa.

馃敼 Ejemplo b谩sico de manejo de excepciones:

try: numero = int(input("Introduce un n煤mero: ")) print(f"El doble es: {numero * 2}") except ValueError: print("❌ Error: Debes ingresar un n煤mero v谩lido.")

✅ Si el usuario introduce un n煤mero, el c贸digo funciona normalmente.
✅ Si introduce texto, el except captura el error y muestra un mensaje sin bloquear el programa.

馃搶 Ejemplo de salida si el usuario ingresa texto:

Error: Debes ingresar un n煤mero v谩lido.

3️⃣ Capturar Errores Espec铆ficos en Python

Podemos capturar distintos tipos de errores para manejarlos de forma adecuada.

馃敼 Ejemplo con m煤ltiples excepciones:

try: lista = [1, 2, 3] indice = int(input("Introduce un 铆ndice: ")) print(f"Elemento en la posici贸n {indice}: {lista[indice]}") except ValueError: print("❌ Error: Debes ingresar un n煤mero.") except IndexError: print("❌ Error: 脥ndice fuera de rango.")

馃搶 Prueba este c贸digo e introduce:
1 → Muestra el elemento correcto.
100 → Muestra un IndexError.
"hola" → Muestra un ValueError.


4️⃣ Usar finally para C贸digo que Siempre se Ejecuta

El bloque finally se ejecuta siempre, independientemente de si hubo un error o no.

馃敼 Ejemplo de finally en manejo de archivos:

try: archivo = open("datos.txt", "r") contenido = archivo.read() print(contenido) except FileNotFoundError: print("❌ Error: El archivo no existe.") finally: print("馃搶 Cierre de recursos completado.")

馃搶 Si el archivo datos.txt no existe, el programa mostrar谩:

Error: El archivo no existe. 馃搶 Cierre de recursos completado.

finally es 煤til para liberar recursos (como archivos o conexiones a bases de datos).


5️⃣ Crear Nuestras Propias Excepciones

Podemos definir nuestras propias excepciones personalizadas con raise.

馃敼 Ejemplo de excepci贸n personalizada:

def verificar_edad(edad): if edad < 18: raise ValueError("❌ Error: Debes ser mayor de edad.") print("✅ Acceso permitido.") try: edad = int(input("Introduce tu edad: ")) verificar_edad(edad) except ValueError as e: print(e)

馃搶 Si el usuario ingresa una edad menor a 18:

Error: Debes ser mayor de edad.

raise permite lanzar un error con un mensaje personalizado.


馃殌 Conclusi贸n

try-except evita que los programas se bloqueen por errores inesperados.
✅ Podemos capturar errores espec铆ficos para manejarlos mejor.
finally se usa para cerrar recursos como archivos o bases de datos.
Podemos definir excepciones personalizadas con raise.

馃搶 Pr贸ximo post: Ejercicios pr谩cticos de manejo de excepciones en Python.

馃搨 C贸digo disponible en mi GitHub: github.com/josecodetech

馃帴 Aprende con mis videos en YouTube: https://www.youtube.com/@josecodetech

馃挰 ¿Alguna vez has tenido un error inesperado en Python? Cu茅ntamelo en los comentarios.


martes, 18 de febrero de 2025

馃憠 Ejercicios Pr谩cticos de Python: Listas, Diccionarios y Funciones

Ya hemos practicado variables, condicionales y bucles. Ahora avanzaremos con estructuras de datos m谩s complejas y funciones.

Hoy resolveremos ejercicios sobre:
✔️ Listas (list)
✔️ Diccionarios (dict)
✔️ Funciones y par谩metros

馃搶 Cada ejercicio incluye el c贸digo, explicaci贸n y prueba de salida.


1️⃣ Ejercicio: Encontrar el N煤mero Mayor en una Lista

馃搷 Objetivo: Escribir un programa que encuentre el n煤mero m谩s grande en una lista dada.

馃敼 C贸digo:

numeros = [12, 45, 78, 34, 89, 23, 67] mayor = max(numeros) print(f"El n煤mero m谩s grande es: {mayor}")

馃敼 Explicaci贸n:

max(lista) devuelve el n煤mero m谩s grande de la lista.

馃搶 Salida esperada:

El n煤mero m谩s grande es: 89

2️⃣ Ejercicio: Contar la Frecuencia de Palabras en un Texto

馃搷 Objetivo: Escribir un programa que cuente cu谩ntas veces aparece cada palabra en un texto.

馃敼 C贸digo:

texto = "python es genial python es poderoso python es divertido" palabras = texto.split() frecuencia = {} for palabra in palabras: frecuencia[palabra] = frecuencia.get(palabra, 0) + 1 print(frecuencia)

馃敼 Explicaci贸n:

split() divide el texto en palabras.
✅ Se usa un diccionario para contar la frecuencia.
.get(palabra, 0) + 1 actualiza el conteo.

馃搶 Salida esperada:

{'python': 3, 'es': 3, 'genial': 1, 'poderoso': 1, 'divertido': 1}

3️⃣ Ejercicio: Funci贸n para Calcular el Factorial de un N煤mero

馃搷 Objetivo: Escribir una funci贸n que reciba un n煤mero y devuelva su factorial.

馃敼 C贸digo:

def factorial(n): resultado = 1 for i in range(1, n + 1): resultado *= i return resultado num = int(input("Introduce un n煤mero: ")) print(f"El factorial de {num} es {factorial(num)}")

馃敼 Explicaci贸n:

✅ Se usa un bucle for para multiplicar los n煤meros hasta n.
✅ Se devuelve el resultado con return.

馃搶 Ejemplo de salida:

Introduce un n煤mero: 5 El factorial de 5 es 120

4️⃣ Ejercicio: Invertir el Orden de una Lista

馃搷 Objetivo: Escribir un programa que invierta el orden de los elementos de una lista.

馃敼 C贸digo:

numeros = [10, 20, 30, 40, 50] numeros.reverse() print("Lista invertida:", numeros)

馃敼 Explicaci贸n:

reverse() modifica la lista en su lugar.

馃搶 Salida esperada:

Lista invertida: [50, 40, 30, 20, 10]

5️⃣ Ejercicio: Buscar un Elemento en un Diccionario

馃搷 Objetivo: Escribir un programa que permita buscar informaci贸n en un diccionario de estudiantes.

馃敼 C贸digo:

estudiantes = { "101": {"nombre": "Jos茅", "edad": 22, "carrera": "Ingenier铆a"}, "102": {"nombre": "Mar铆a", "edad": 21, "carrera": "Medicina"}, "103": {"nombre": "Carlos", "edad": 23, "carrera": "Arquitectura"} } codigo = input("Introduce el c贸digo del estudiante: ") if codigo in estudiantes: print(estudiantes[codigo]) else: print("Estudiante no encontrado.")

馃敼 Explicaci贸n:

✅ Se usa un diccionario anidado (dict dentro de otro dict).
✅ Se verifica si el c贸digo ingresado est谩 en el diccionario.

馃搶 Ejemplo de salida:

Introduce el c贸digo del estudiante: 101 {'nombre': 'Jos茅', 'edad': 22, 'carrera': 'Ingenier铆a'}

馃殌 Conclusi贸n

✅ Hoy hemos resuelto ejercicios con listas, diccionarios y funciones en Python.
✅ Estos conceptos son fundamentales para trabajar con datos en programas m谩s complejos.
✅ Te invito a probar estos ejercicios y modificar el c贸digo para entenderlo mejor.

馃搶 Pr贸ximo post: M谩s ejercicios avanzados con Programaci贸n Orientada a Objetos y manejo de archivos.

馃搨 Descarga los ejercicios en mi GitHub: github.com/josecodetech

馃帴 Aprende con mis videos en YouTube: https://www.youtube.com/@josecodetech/

馃挰 D茅jame un comentario si tienes dudas o quieres m谩s ejercicios.



lunes, 17 de febrero de 2025

馃憠 Ejercicios Pr谩cticos de Python: Variables, Condicionales y Bucles

Hemos aprendido la sintaxis b谩sica de Python, incluyendo variables, condicionales y bucles. Ahora es momento de poner en pr谩ctica lo aprendido con ejercicios explicados paso a paso.

Hoy resolveremos ejercicios sobre:
✔️ Variables y tipos de datos
✔️ Condicionales (if, elif, else)
✔️ Bucles (for, while)

馃搶 Cada ejercicio incluye el c贸digo, explicaci贸n y prueba de salida.


1️⃣ Ejercicio: Calculadora de Edad

馃搷 Objetivo: Escribir un programa que pida al usuario su a帽o de nacimiento y calcule su edad actual.

馃敼 C贸digo:

a帽o_nacimiento = int(input("Introduce tu a帽o de nacimiento: ")) a帽o_actual = 2024 # Puedes usar datetime para hacerlo din谩mico edad = a帽o_actual - a帽o_nacimiento print(f"Tienes {edad} a帽os.")

馃敼 Explicaci贸n:

input() recibe el a帽o de nacimiento del usuario.
✅ Se convierte a entero con int().
✅ Se resta al a帽o actual para calcular la edad.

馃搶 Ejemplo de salida:

Introduce tu ao de nacimiento: 2000 Tienes 24 aos.

2️⃣ Ejercicio: Verificar si un N煤mero es Par o Impar

馃搷 Objetivo: Escribir un programa que pida un n煤mero y diga si es par o impar.

馃敼 C贸digo:

numero = int(input("Introduce un n煤mero: ")) if numero % 2 == 0: print(f"El n煤mero {numero} es par.") else: print(f"El n煤mero {numero} es impar.")

馃敼 Explicaci贸n:

✅ Se usa el operador % para verificar si el n煤mero es divisible por 2.
✅ Si numero % 2 == 0, es par, si no, es impar.

馃搶 Ejemplo de salida:

Introduce un n煤mero: 7 El n煤mero 7 es impar.

3️⃣ Ejercicio: Contador del 1 al 10 usando while

馃搷 Objetivo: Escribir un programa que imprima los n煤meros del 1 al 10 usando un bucle while.

馃敼 C贸digo:

contador = 1 while contador <= 10: print(contador) contador += 1

馃敼 Explicaci贸n:

while contador <= 10: → Se ejecuta mientras el contador sea menor o igual a 10.
✅ En cada iteraci贸n, el contador se incrementa con contador += 1.

馃搶 Salida esperada:

1 2 3 4 5 6 7 8 9 10

4️⃣ Ejercicio: Tabla de Multiplicar de un N煤mero

馃搷 Objetivo: Pedir al usuario un n煤mero y mostrar su tabla de multiplicar hasta el 10 usando un bucle for.

馃敼 C贸digo:

numero = int(input("Introduce un n煤mero: ")) for i in range(1, 11): print(f"{numero} x {i} = {numero * i}")

馃敼 Explicaci贸n:

for i in range(1, 11): → Recorre los n煤meros del 1 al 10.
numero * i → Multiplica el n煤mero ingresado por cada valor de i.

馃搶 Ejemplo de salida:

Introduce un n煤mero: 5 5 x 1 = 5 5 x 2 = 10 ... 5 x 10 = 50

5️⃣ Ejercicio: Suma de los N煤meros del 1 al 100

馃搷 Objetivo: Calcular la suma de todos los n煤meros del 1 al 100 usando un bucle for.

馃敼 C贸digo:

suma = 0 for i in range(1, 101): suma += i print(f"La suma de los n煤meros del 1 al 100 es: {suma}")

馃敼 Explicaci贸n:

✅ Se inicializa suma = 0.
for i in range(1, 101): recorre los n煤meros del 1 al 100.
✅ Se acumula la suma con suma += i.

馃搶 Salida esperada:

La suma de los n煤meros del 1 al 100 es: 5050

馃殌 Conclusi贸n

✅ Hoy hemos resuelto ejercicios pr谩cticos sobre variables, condicionales y bucles en Python.
✅ Estos conceptos son fundamentales para cualquier tipo de programa.
✅ Te invito a probar estos ejercicios y modificar el c贸digo para entenderlo mejor.

馃搶 Pr贸ximo post: M谩s ejercicios avanzados con listas, diccionarios y funciones.

馃搨 Descarga los ejercicios en mi GitHub: github.com/josecodetech

馃帴 Aprende con mis videos en YouTube: https://www.youtube.com/@josecodetech/

馃挰 D茅jame un comentario si tienes dudas o quieres m谩s ejercicios.


domingo, 16 de febrero de 2025

馃憠 C贸mo Desplegar una API Flask en la Nube con Render o Heroku

En el post anterior, aprendimos a crear una API con Flask. Sin embargo, para que sea accesible desde cualquier parte del mundo, necesitamos desplegarla en la nube.

Hoy aprender谩s:
✔️ ¿Qu茅 es el despliegue y por qu茅 es importante?
✔️ Preparar nuestra API Flask para producci贸n
✔️ Desplegar en Render (opci贸n gratuita y sencilla)
✔️ Desplegar en Heroku (otra opci贸n popular)
✔️ Probar nuestra API en la web


1️⃣ ¿Qu茅 es el despliegue y por qu茅 es importante?

El despliegue consiste en hacer que nuestra aplicaci贸n est茅 disponible en internet, en un servidor que ejecute el c贸digo de nuestra API y acepte peticiones desde cualquier lugar del mundo.

馃搶 Ejemplos de APIs desplegadas:
✅ Un sistema de reservas de hoteles que recibe solicitudes en l铆nea.
✅ Un chatbot que consulta datos desde una API en la nube.
✅ Un servicio que proporciona informaci贸n del clima en tiempo real.

Para este tutorial, usaremos Render y Heroku, dos opciones f谩ciles para desplegar APIs Flask.


2️⃣ Preparar la API Flask para Producci贸n

Antes de desplegar, debemos modificar nuestro c贸digo para asegurarnos de que puede ejecutarse correctamente en un servidor.

馃搶 Requisitos para el despliegue:
1️⃣ Asegurar que el c贸digo de la API est谩 funcionando localmente.
2️⃣ Crear un archivo requirements.txt con las dependencias.
3️⃣ Definir el archivo Procfile si usas Heroku.


馃搷 Ejemplo de API Flask lista para producci贸n

Crea un archivo app.py con el siguiente c贸digo:

from flask import Flask app = Flask(__name__) @app.route('/') def home(): return {"mensaje": "¡Hola, API Flask en la nube!"} if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)

馃搶 Explicaci贸n:
host='0.0.0.0' → Permite que la API sea accesible desde cualquier lugar.
port=5000 → Define el puerto de la API.


馃搷 Crear requirements.txt

Este archivo indica qu茅 librer铆as necesita nuestra API. Para generarlo, ejecuta:

pip freeze > requirements.txt

馃搶 Ejemplo de requirements.txt:

flask gunicorn

gunicorn → Necesario para ejecutar Flask en servidores.


馃搷 Crear Procfile para Heroku

Si usas Heroku, debes crear un archivo Procfile (sin extensi贸n) con el siguiente contenido:

web: gunicorn app:app

✅ Esto indica que el servidor se ejecutar谩 con Gunicorn en producci贸n.


3️⃣ Desplegar en Render (Opci贸n Gratuita y F谩cil)

馃敼 Paso 1: Subir el Proyecto a GitHub

Render requiere que el c贸digo est茅 en un repositorio de GitHub. Si a煤n no lo tienes, s煤belo con estos comandos:

git init git add . git commit -m "API Flask lista para despliegue" git branch -M main git remote add origin https://github.com/tu-usuario/tu-repositorio.git git push -u origin main

馃敼 Paso 2: Crear el Servidor en Render

1️⃣ Ve a Render y reg铆strate.
2️⃣ En el Dashboard, haz clic en New Web Service.
3️⃣ Conecta tu cuenta de GitHub y selecciona tu repositorio.
4️⃣ Configura los siguientes par谩metros:

  • Runtime: Python
  • Start Command: gunicorn app:app
  • Build Command: pip install -r requirements.txt



5️⃣ Haz clic en Deploy y espera que Render despliegue tu API.

馃搶 Tu API Flask ahora est谩 disponible en una URL p煤blica como:

https://tu-api.onrender.com/

Render es gratuito y ofrece hosting autom谩tico con GitHub.


4️⃣ Desplegar en Heroku (Otra Opci贸n Popular)

馃敼 Paso 1: Instalar Heroku CLI

Descarga e instala Heroku CLI desde aqu铆. Luego, inicia sesi贸n en la terminal:

heroku login

馃敼 Paso 2: Crear una App en Heroku

heroku create mi-api-flask

Esto generar谩 una URL como:

https://mi-api-flask.herokuapp.com/

馃敼 Paso 3: Subir el C贸digo a Heroku

Aseg煤rate de que tu c贸digo est茅 en GitHub o usa estos comandos:

git add . git commit -m "Desplegando API Flask en Heroku" git push heroku main

Heroku desplegar谩 la API y podr谩s probarla en la URL generada.


馃殌 Conclusi贸n

Hoy aprendimos a desplegar una API Flask en la nube con Render y Heroku.

Render → M谩s f谩cil, gratuito y con integraci贸n con GitHub.
Heroku → Popular, pero requiere m谩s configuraci贸n.

馃搶 Ahora puedes compartir tu API con el mundo y usarla en proyectos web, apps m贸viles o chatbots.

En el pr贸ximo post, veremos c贸mo consumir APIs desde Python y JavaScript. ¡No te lo pierdas!

馃搨 Descarga ejemplos y ejercicios en mi GitHub: github.com/josecodetech

馃帴 Aprende con mis videos en YouTube: https://www.youtube.com/@josecodetech/

馃挰 D茅jame un comentario si tienes dudas o quieres que cubra alg煤n tema en detalle.



s谩bado, 15 de febrero de 2025

馃憠 Crear una API con Python: Introducci贸n a Flask

Hasta ahora hemos aprendido a manejar archivos y bases de datos en Python. Pero, ¿c贸mo podemos conectar nuestra aplicaci贸n con otros sistemas o aplicaciones web? La respuesta es: crear una API (Interfaz de Programaci贸n de Aplicaciones).

Hoy aprender谩s:
✔️ ¿Qu茅 es una API y por qu茅 es importante?
✔️ C贸mo instalar y usar Flask en Python
✔️ Crear una API simple con Flask
✔️ Ejemplo pr谩ctico paso a paso


1️⃣ ¿Qu茅 es una API y por qu茅 es importante?

Una API (Application Programming Interface) es un conjunto de reglas que permite a dos aplicaciones comunicarse entre s铆.

馃搶 Ejemplos de APIs en la vida real:
✅ Una app de clima obtiene datos del tiempo de una API de meteorolog铆a.
✅ Un sitio web de pago usa una API de PayPal para procesar transacciones.
✅ Una aplicaci贸n m贸vil obtiene datos de una base de datos a trav茅s de una API.

En Python, podemos crear una API con Flask, un framework ligero y f谩cil de usar.


2️⃣ Instalar Flask en Python

Antes de empezar, instala Flask ejecutando el siguiente comando en tu terminal:

pip install flask

3️⃣ Crear una API Simple con Flask

Ahora, vamos a crear un servidor con Flask que devuelva un mensaje cuando accedamos a una ruta espec铆fica.

馃敼 C贸digo b谩sico de una API en Flask

from flask import Flask app = Flask(__name__) @app.route('/') def inicio(): return {"mensaje": "¡Hola, bienvenido a mi API en Flask!"} if __name__ == '__main__': app.run(debug=True)

馃搶 Explicaci贸n:
Flask(__name__) → Crea una instancia de Flask.
@app.route('/') → Define una ruta para la API ("/" es la p谩gina principal).
return {"mensaje": "Hola"} → Devuelve un JSON con un mensaje.
app.run(debug=True) → Inicia el servidor en modo de desarrollo.

馃搶 Para probar la API:
1️⃣ Guarda el c贸digo en un archivo api.py.
2️⃣ Ejecuta python api.py.
3️⃣ Abre un navegador y visita http://127.0.0.1:5000/.

馃搶 Salida esperada en el navegador:

{"mensaje": "¡Hola, bienvenido a mi API en Flask!"}

4️⃣ Crear una API con Rutas Din谩micas

Podemos mejorar nuestra API permitiendo par谩metros en la URL.

from flask import Flask app = Flask(__name__) @app.route('/saludo/<nombre>') def saludo(nombre): return {"mensaje": f"Hola, {nombre}! Bienvenido a la API."} if __name__ == '__main__': app.run(debug=True)

馃搶 Prueba la API en tu navegador visitando:
馃憠 http://127.0.0.1:5000/saludo/Jos茅

馃搶 Salida esperada:

{"mensaje": "Hola, Jos茅! Bienvenido a la API."}

<nombre> permite recibir un valor din谩mico desde la URL.


5️⃣ Enviar y Recibir Datos con POST en Flask

A veces, necesitamos recibir datos desde una aplicaci贸n externa. Para esto, usamos m茅todos HTTP, como POST.

馃敼 Ejemplo: Recibir datos con POST

from flask import Flask, request app = Flask(__name__) @app.route('/sumar', methods=['POST']) def sumar(): datos = request.get_json() resultado = datos['a'] + datos['b'] return {"resultado": resultado} if __name__ == '__main__': app.run(debug=True)

馃搶 C贸mo probarlo:
Usa Postman o ejecuta este comando en la terminal:

curl -X POST http://127.0.0.1:5000/sumar -H "Content-Type: application/json" -d '{"a": 5, "b": 3}'

馃搶 Salida esperada:

{"resultado": 8}

request.get_json() → Recibe datos en formato JSON desde una petici贸n POST.
✅ Se suman los valores y se devuelve un JSON con el resultado.


6️⃣ Conectar Flask con una Base de Datos SQLite

Podemos conectar nuestra API con una base de datos para almacenar informaci贸n.

馃敼 Ejemplo: API con SQLite para manejar usuarios

from flask import Flask, request, jsonify import sqlite3 app = Flask(__name__) # Crear base de datos conexion = sqlite3.connect("usuarios.db", check_same_thread=False) cursor = conexion.cursor() cursor.execute("CREATE TABLE IF NOT EXISTS usuarios (id INTEGER PRIMARY KEY, nombre TEXT)") conexion.commit() @app.route('/usuarios', methods=['POST']) def agregar_usuario(): datos = request.get_json() cursor.execute("INSERT INTO usuarios (nombre) VALUES (?)", (datos['nombre'],)) conexion.commit() return jsonify({"mensaje": "Usuario agregado con 茅xito"}), 201 @app.route('/usuarios', methods=['GET']) def obtener_usuarios(): cursor.execute("SELECT * FROM usuarios") usuarios = cursor.fetchall() return jsonify({"usuarios": usuarios}) if __name__ == '__main__': app.run(debug=True)

馃搶 Explicaci贸n:
✅ Se crea una base de datos SQLite llamada usuarios.db.
POST /usuarios → Permite agregar un usuario.
GET /usuarios → Devuelve la lista de usuarios almacenados.


馃殌 Conclusi贸n

Hoy aprendimos a crear una API con Flask en Python, desde lo m谩s b谩sico hasta integrar una base de datos.

Flask es un framework ligero para construir APIs en Python.
✅ Podemos definir rutas din谩micas y recibir datos mediante POST.
✅ Podemos conectar nuestra API con una base de datos SQLite.

En el pr贸ximo post, veremos c贸mo desplegar nuestra API en la nube usando servicios como Heroku o Render. ¡No te lo pierdas!

馃搨 Descarga ejemplos y ejercicios en mi GitHub: github.com/josecodetech

馃帴 Aprende con mis videos en YouTube: https://www.youtube.com/@josecodetech

馃挰 D茅jame un comentario si tienes dudas o quieres que cubra alg煤n tema en detalle.



viernes, 14 de febrero de 2025

馃憠 Manejo de Archivos y Bases de Datos en Python: Guarda y Recupera Informaci贸n

Hasta ahora hemos aprendido a manejar estructuras de datos y a escribir c贸digo organizado con funciones, m贸dulos y programaci贸n orientada a objetos. Ahora vamos a explorar c贸mo guardar y recuperar informaci贸n en archivos y bases de datos con Python.

Hoy aprender谩s:
✔️ C贸mo leer y escribir archivos en Python
✔️ Manejo de archivos CSV y JSON
✔️ Introducci贸n a bases de datos con SQLite
✔️ Ejemplo pr谩ctico explicado paso a paso


1️⃣ Lectura y Escritura de Archivos en Python

Python permite leer y escribir archivos de texto (.txt) usando la funci贸n open().

馃敼 Ejemplo: Escribir en un archivo

with open("archivo.txt", "w") as archivo: archivo.write("Hola, este es un archivo de texto en Python.")

馃搶 Explicaci贸n:
"w" → Modo escritura (borra el contenido anterior)
with open(...) → Abre el archivo y lo cierra autom谩ticamente al terminar


馃敼 Ejemplo: Leer un archivo

with open("archivo.txt", "r") as archivo: contenido = archivo.read() print(contenido)

馃搶 Explicaci贸n:
"r" → Modo lectura
.read() → Lee todo el contenido del archivo

馃搶 Salida esperada:

Hola, este es un archivo de texto en Python.

2️⃣ Manejo de Archivos CSV y JSON en Python

馃搷 Trabajar con CSV (valores separados por comas)

Python ofrece la librer铆a csv para manejar archivos .csv usados en hojas de c谩lculo y bases de datos.

馃敼 Ejemplo: Escribir un archivo CSV

import csv with open("datos.csv", "w", newline="") as archivo: escritor = csv.writer(archivo) escritor.writerow(["Nombre", "Edad", "Ciudad"]) escritor.writerow(["Jos茅", 25, "Madrid"]) escritor.writerow(["Mar铆a", 30, "Barcelona"])

馃搶 Explicaci贸n:
csv.writer() → Crea un escritor CSV
writerow([...]) → Agrega una fila de datos


馃敼 Ejemplo: Leer un archivo CSV

import csv with open("datos.csv", "r") as archivo: lector = csv.reader(archivo) for fila in lector: print(fila)

馃搶 Salida esperada:

['Nombre', 'Edad', 'Ciudad'] ['Jos茅', '25', 'Madrid'] ['Mar铆a', '30', 'Barcelona']

馃搷 Trabajar con JSON (JavaScript Object Notation)

Los archivos JSON son ideales para almacenar datos estructurados.

馃敼 Ejemplo: Guardar datos en un archivo JSON

import json datos = { "nombre": "Jos茅", "edad": 25, "ciudad": "Madrid" } with open("datos.json", "w") as archivo: json.dump(datos, archivo, indent=4)

馃搶 Explicaci贸n:
json.dump() → Guarda los datos en un archivo JSON
indent=4 → Formatea el archivo con espacios para mejor lectura


馃敼 Ejemplo: Leer un archivo JSON

import json with open("datos.json", "r") as archivo: datos = json.load(archivo) print(datos)

馃搶 Salida esperada:

{'nombre': 'Jos茅', 'edad': 25, 'ciudad': 'Madrid'}

json.load() → Carga los datos desde un archivo JSON


3️⃣ Bases de Datos con SQLite en Python

SQLite es una base de datos liviana integrada en Python.

馃敼 Ejemplo: Crear una Base de Datos SQLite y una Tabla

import sqlite3 conexion = sqlite3.connect("base_datos.db") cursor = conexion.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS usuarios ( id INTEGER PRIMARY KEY AUTOINCREMENT, nombre TEXT, edad INTEGER ) """) conexion.commit() conexion.close()

馃搶 Explicaci贸n:
sqlite3.connect() → Crea o abre una base de datos
cursor.execute() → Ejecuta comandos SQL
commit() → Guarda los cambios


馃敼 Ejemplo: Insertar Datos en SQLite

conexion = sqlite3.connect("base_datos.db") cursor = conexion.cursor() cursor.execute("INSERT INTO usuarios (nombre, edad) VALUES (?, ?)", ("Jos茅", 25)) conexion.commit() conexion.close()

馃搶 Explicaci贸n:
INSERT INTO → Agrega un nuevo usuario a la base de datos


馃敼 Ejemplo: Leer Datos desde SQLite

conexion = sqlite3.connect("base_datos.db") cursor = conexion.cursor() cursor.execute("SELECT * FROM usuarios") usuarios = cursor.fetchall() for usuario in usuarios: print(usuario) conexion.close()

馃搶 Salida esperada:

(1, 'Jos茅', 25)

fetchall() → Recupera todos los registros de la tabla


馃殌 Conclusi贸n

Hoy aprendimos a manejar archivos y bases de datos en Python.

Archivos .txt → Leer y escribir informaci贸n b谩sica
Archivos .csv y .json → Manejo de datos estructurados
Bases de Datos SQLite → Almacenar informaci贸n de manera eficiente

En el pr贸ximo post, veremos c贸mo crear una API con Python para conectar aplicaciones web y bases de datos. ¡No te lo pierdas!

馃搨 Descarga ejemplos y ejercicios en mi GitHub: github.com/josecodetech

馃帴 Aprende con mis videos en YouTube: https://www.youtube.com/@josecodetech/

馃挰 D茅jame un comentario si tienes dudas o quieres que cubra alg煤n tema en detalle.