Objetivos de Aprendizaje
Al finalizar esta clase, serás capaz de:
- Usar
if,elif,elsepara tomar decisiones - Crear bucles
forpara repetir acciones con listas y rangos - Usar
whilepara repetir mientras se cumpla una condición - Controlar bucles con
breakycontinue - Crear un menú interactivo para el proyecto TaskFlow
Condicionales: if/elif/else (20 min)
Los condicionales permiten que el programa tome decisiones.
Sintaxis Básica
if condicion:
# Código si es True
pass
elif otra_condicion:
# Código si otra es True
pass
else:
# Código si ninguna es True
pass
Ejercicio Rápido 1: Clasificar Números (5 min)
Crea un programa que:
- Pida un número al usuario
- Diga si es positivo, negativo o cero
- Diga si es par o impar
Pista: Usa el operador % (módulo) para saber si es par: numero % 2 == 0
Ejemplo: Clasificar Edad
edad = int(input("Ingresa tu edad: "))
if edad < 13:
print("Eres un niño")
elif edad < 20:
print("Eres un adolescente")
elif edad < 65:
print("Eres un adulto")
else:
print("Eres un adulto mayor")
print("Programa terminado") # Esto siempre se ejecuta
Ejercicio Rápido 2: Calculadora de Descuentos (5 min)
Crea un programa que calcule el precio final con descuentos:
- Pide el precio original del producto
- Si el precio es mayor a $100, aplica 10% de descuento
- Si el precio es mayor a $500, aplica 20% de descuento
- Muestra: precio original, descuento aplicado, precio final
Operadores Lógicos
# and - Ambos deben ser True
if edad >= 18 and tiene_licencia:
print("Puede conducir")
# or - Al menos uno debe ser True
if es_estudiante or es_profesor:
print("Tiene acceso a la biblioteca")
# not - Invierte el valor
if not es_bloqueado:
print("Usuario activo")
# Combinados
if (edad >= 18 and tiene_licencia) or es_emergencia:
print("Puede conducir")
Ejercicio Rápido 3: Validador de Acceso (5 min)
Crea un validador de acceso a un sistema:
- Pide: nombre de usuario, contraseña, si tiene código de verificación
- Acceso permitido si: (usuario="admin" Y contraseña="1234") O tiene código de verificación
- Muestra mensaje de acceso permitido o denegado
Operador in
frutas = ["manzana", "banana", "naranja"]
if "manzana" in frutas:
print("Tenemos manzanas en stock")
# También funciona con strings
if "@" in email:
print("Email parece válido")
# Negado
if "admin" not in roles:
print("No tienes permisos de administrador")
Ejercicio Rápido 4: Buscador en Lista (5 min)
Usa el operador in:
- Crea una lista con 5 nombres de productos
- Pide al usuario un producto a buscar
- Usa
inpara verificar si existe - Si no existe, muestra "Producto no disponible"
- Agrega opción para agregar producto si no existe
Bucles: for y while (25 min)
Bucle for - Iterar sobre colecciones
# Iterar sobre una lista
frutas = ["manzana", "banana", "naranja"]
for fruta in frutas:
print(f"Tengo una {fruta}")
# Iterar sobre un string (caracter por caracter)
for letra in "Python":
print(letra)
# range() - Generar números
for i in range(5): # 0, 1, 2, 3, 4
print(i)
for i in range(1, 6): # 1, 2, 3, 4, 5
print(i)
for i in range(0, 10, 2): # 0, 2, 4, 6, 8 (pares)
print(i)
# enumerate() - Índice y valor
for indice, fruta in enumerate(frutas):
print(f"{indice}: {fruta}")
# enumerate con inicio en 1
for numero, fruta in enumerate(frutas, 1):
print(f"{numero}. {fruta}")
Ejercicio Rápido 5: Tabla de Multiplicar (5 min)
Usa for con range():
- Pide al usuario un número
- Muestra la tabla de multiplicar del 1 al 10
- Formatea: "5 x 3 = 15"
- Usa
enumerate()para numerar las filas
Bucle while - Repetir mientras se cumpla
# Contador simple
contador = 0
while contador < 5:
print(contador)
contador += 1 # IMPORTANTE: modificar la variable
# Validar entrada
while True:
edad = input("Ingresa tu edad (número positivo): ")
if edad.isdigit() and int(edad) > 0:
edad = int(edad)
break # Sale del bucle
print("Por favor ingresa un número válido.")
print(f"Edad registrada: {edad}")
Ejercicio Rápido 6: Validación de PIN (5 min)
Crea un sistema de validación de PIN:
- Define un PIN correcto (ej: "1234")
- Pide al usuario que ingrese el PIN
- Usa
whilepara permitir máximo 3 intentos - Si acierta antes de 3 intentos, muestra "Acceso concedido"
- Si falla 3 veces, bloquea y muestra "Cuenta bloqueada"
while eventualmente sea False, o tendrás un bucle infinito.
Control de Flujo (10 min)
break - Salir del bucle
# Buscar un elemento y detenerse
usuarios = ["ana", "juan", "maria", "pedro", "luisa"]
buscar = "maria"
for usuario in usuarios:
print(f"Buscando: {usuario}")
if usuario == buscar:
print(f"¡Encontrado! {usuario}")
break # Sale del bucle inmediatamente
continue - Saltar a la siguiente iteración
# Mostrar solo números pares
for numero in range(1, 11):
if numero % 2 != 0: # Si es impar
continue # Salta al siguiente número
print(numero) # Solo imprime pares: 2, 4, 6, 8, 10
else en bucles - Se ejecuta si NO hubo break
# Buscar usuario
usuarios = ["ana", "juan", "pedro"]
buscar = "maria"
for usuario in usuarios:
if usuario == buscar:
print(f"{buscar} encontrado")
break
else:
# Solo se ejecuta si no encontramos el usuario
print(f"{buscar} NO está en la lista")
Ejercicio Rápido 7: Filtro de Números (5 min)
Crea un programa que procese una lista de números:
- Crea una lista con números del 1 al 20
- Usa
continue para saltar los números pares
- Usa
break si encuentra un número divisible por 7
- Muestra solo los números impares procesados antes del break
- Usa el
else del for para mostrar si se encontró o no el número divisible por 7
Laboratorio 1: Menú de Usuarios Mejorado (25 min)
Crea un menú interactivo para gestionar usuarios (base del proyecto TaskFlow).
# sistema_usuarios.py
usuarios = []
def mostrar_menu():
print("\n=== SISTEMA DE USUARIOS ===")
print("1. Ver usuarios")
print("2. Agregar usuario")
print("3. Buscar usuario")
print("4. Salir")
def ver_usuarios():
if len(usuarios) == 0:
print("\nNo hay usuarios registrados.")
return
print("\n--- Lista de Usuarios ---")
for i, usuario in enumerate(usuarios, 1):
print(f"{i}. {usuario}")
def agregar_usuario():
nombre = input("\nIngresa el nombre del usuario: ")
# Validar que no esté vacío
if not nombre.strip():
print("❌ El nombre no puede estar vacío.")
return
# Validar que no exista
if nombre in usuarios:
print("❌ Ese usuario ya existe.")
return
usuarios.append(nombre)
print(f"✅ Usuario '{nombre}' agregado correctamente.")
def buscar_usuario():
if len(usuarios) == 0:
print("\nNo hay usuarios para buscar.")
return
nombre = input("\n¿Qué usuario buscas? ")
for usuario in usuarios:
if usuario.lower() == nombre.lower():
print(f"✅ Usuario encontrado: {usuario}")
return
print(f"❌ Usuario '{nombre}' no encontrado.")
# Programa principal
while True:
mostrar_menu()
opcion = input("\nSelecciona una opción (1-4): ")
if opcion == "1":
ver_usuarios()
elif opcion == "2":
agregar_usuario()
elif opcion == "3":
buscar_usuario()
elif opcion == "4":
print("\n¡Hasta luego!")
break
else:
print("\n❌ Opción no válida. Intenta de nuevo.")
Retos Adicionales
- Agrega opción 5: Eliminar usuario por nombre
- Valida que el nombre tenga al menos 3 caracteres
- Permite buscar coincidencias parciales (ej: "ju" encuentra "juan")
Laboratorio 2: Sistema de Calificaciones (25 min)
Crea un sistema completo para gestionar calificaciones de estudiantes con múltiples evaluaciones.
Requisitos
- Registrar múltiples estudiantes
- Cada estudiante tiene 3 calificaciones (parcial 1, parcial 2, final)
- Calcular promedio ponderado: P1(30%) + P2(30%) + Final(40%)
- Determinar si aprobó (promedio >= 3.0)
- Mostrar estadísticas: mejor estudiante, promedio general, tasa de aprobación
Código Base
# sistema_calificaciones.py
print("📚 SISTEMA DE CALIFICACIONES 📚\n")
estudiantes = []
while True:
print("\n" + "="*50)
print("MENÚ PRINCIPAL")
print("="*50)
print("1. Registrar estudiante")
print("2. Ver todos los estudiantes")
print("3. Ver estadísticas")
print("4. Buscar estudiante")
print("5. Salir")
opcion = input("\nSelecciona una opción: ")
if opcion == "1":
nombre = input("Nombre del estudiante: ").strip()
if not nombre:
print("❌ El nombre no puede estar vacío")
continue
# Verificar si ya existe
ya_existe = False
for est in estudiantes:
if est["nombre"].lower() == nombre.lower():
ya_existe = True
break
if ya_existe:
print("❌ Este estudiante ya está registrado")
continue
# Pedir calificaciones con validación
def pedir_nota(mensaje):
while True:
try:
nota = float(input(mensaje))
if 0 <= nota <= 5:
return nota
print("❌ La nota debe estar entre 0 y 5")
except ValueError:
print("❌ Ingresa un número válido")
p1 = pedir_nota("Parcial 1 (30%): ")
p2 = pedir_nota("Parcial 2 (30%): ")
final = pedir_nota("Final (40%): ")
# Calcular promedio ponderado
promedio = (p1 * 0.3) + (p2 * 0.3) + (final * 0.4)
# Determinar estado
if promedio >= 3.0:
estado = "✅ Aprobado"
else:
estado = "❌ Reprobado"
estudiante = {
"nombre": nombre,
"p1": p1,
"p2": p2,
"final": final,
"promedio": promedio,
"estado": estado
}
estudiantes.append(estudiante)
print(f"\n✅ Estudiante registrado. Promedio: {promedio:.2f} - {estado}")
elif opcion == "2":
if not estudiantes:
print("\n📭 No hay estudiantes registrados")
continue
print("\n" + "="*70)
print(f"{'NOMBRE':<20} {'P1':<6} {'P2':<6} {'FINAL':<6} {'PROM':<6} {'ESTADO'}")
print("="*70)
for est in estudiantes:
print(f"{est['nombre']:<20} {est['p1']:<6.1f} {est['p2']:<6.1f} "
f"{est['final']:<6.1f} {est['promedio']:<6.2f} {est['estado']}")
print("="*70)
elif opcion == "3":
if not estudiantes:
print("\n📭 No hay datos para estadísticas")
continue
# Calcular estadísticas
total_est = len(estudiantes)
aprobados = 0
suma_promedios = 0
mejor_estudiante = estudiantes[0]
for est in estudiantes:
suma_promedios += est["promedio"]
if "Aprobado" in est["estado"]:
aprobados += 1
if est["promedio"] > mejor_estudiante["promedio"]:
mejor_estudiante = est
promedio_general = suma_promedios / total_est
tasa_aprobacion = (aprobados / total_est) * 100
print("\n" + "="*50)
print("📊 ESTADÍSTICAS")
print("="*50)
print(f"Total estudiantes: {total_est}")
print(f"Aprobados: {aprobados}")
print(f"Reprobados: {total_est - aprobados}")
print(f"Tasa de aprobación: {tasa_aprobacion:.1f}%")
print(f"Promedio general: {promedio_general:.2f}")
print(f"\n🏆 Mejor estudiante: {mejor_estudiante['nombre']}")
print(f" Promedio: {mejor_estudiante['promedio']:.2f}")
print("="*50)
elif opcion == "4":
if not estudiantes:
print("\n📭 No hay estudiantes registrados")
continue
buscar = input("Nombre a buscar: ").strip().lower()
encontrados = []
for est in estudiantes:
if buscar in est["nombre"].lower():
encontrados.append(est)
if encontrados:
print(f"\n✅ {len(encontrados)} estudiante(s) encontrado(s):")
for est in encontrados:
print(f" • {est['nombre']}: {est['promedio']:.2f} {est['estado']}")
else:
print(f"❌ No se encontró '{buscar}'")
elif opcion == "5":
print("\n👋 ¡Hasta luego!")
break
else:
print("\n❌ Opción no válida")
Retos Adicionales
- Validación: Agrega límite máximo de 20 estudiantes
- Editar: Permite modificar calificaciones de un estudiante existente
- Histórico: Muestra la nota más alta y más baja de cada parcial
- Ranking: Muestra los estudiantes ordenados por promedio
Ejercicios Adicionales (10 min)
Crea un juego donde:
- La computadora genera un número aleatorio (1-100)
- El usuario tiene 7 intentos para adivinar
- Después de cada intento, indica "mayor" o "menor"
- Muestra mensaje de victoria o derrota
Pista: Usa import random y random.randint(1, 100)
Crea un validador que verifique:
- Mínimo 8 caracteres
- Al menos una letra mayúscula
- Al menos un número
- Al menos un caracter especial (!@#$%^&*)
Pista: Usa bucles for para recorrer la contraseña
Usa bucles anidados para crear:
*
**
***
****
*****
*
***
*****
*******
*********
Extiende la calculadora para incluir:
- Potencia (base^exponente)
- Raíz cuadrada
- Factorial
- Logaritmo
Pista: Usa import math
Git: Primeros Pasos (20 min)
Ahora que tienes código, es momento de versionarlo con Git.
Inicializar un Repositorio
# En la terminal, dentro de tu carpeta de proyectos:
cd poo2-practicas
# Inicializar Git en esta carpeta
git init
# Verificar que se creó (archivo oculto .git)
ls -la
Ejercicio Práctico: Versiona tu Código (10 min)
Vamos a guardar el sistema de usuarios en Git:
- Crea una carpeta
clase-01dentro depoo2-practicas - Copia tu archivo
sistema_usuarios.pya esa carpeta - Abre la terminal en VSCode (Ctrl+`)
- Ejecuta:
git status(verás archivos en rojo) - Agrega el archivo:
git add clase-01/sistema_usuarios.py - Verifica:
git status(ahora en verde) - Crea tu primer commit:
git commit -m "Sistema de usuarios básico" - Ver historial:
git log
Los 3 Estados de Git
| Estado | Descripción | Comando |
|---|---|---|
| Working Directory | Archivos modificados pero no preparados | Editas archivos |
| Staging Area | Archivos listos para guardar | git add |
| Repository | Historial guardado | git commit |
Comandos Esenciales
# Ver estado actual
$ git status
# Agregar archivo específico
$ git add nombre_archivo.py
# Agregar todos los cambios
$ git add .
# Guardar cambios con mensaje
$ git commit -m "Mensaje descriptivo"
# Ver historial de commits
$ git log
# Ver historial resumido
$ git log --oneline
Archivo .gitignore
Archivos que Git debe ignorar (no versionar):
# Crear archivo .gitignore
touch .gitignore
# Contenido típico para Python:
__pycache__/
*.pyc
*.pyo
.env
.vscode/
*.log
.gitignore para excluir archivos .env.
Ejercicio Rápido: Flujo de Trabajo (5 min)
Practica el ciclo completo:
- Modifica el sistema de usuarios (agrega un print de bienvenida)
git status- verás el archivo modificadogit diff- verás exactamente qué cambiógit add .- prepara todos los cambiosgit commit -m "Agregado mensaje de bienvenida"git log --oneline- deberías ver 2 commits
"feat: sistema de usuarios básico"- nueva funcionalidad"fix: validación de nombres vacíos"- corrección de bug"docs: agregado README"- documentación
Resumen
Python
| Estructura | Uso | Ejemplo |
|---|---|---|
if/elif/else |
Tomar decisiones | if edad >= 18: |
for |
Iterar colecciones | for u in usuarios: |
while |
Repetir condicionalmente | while opcion != "4": |
break |
Salir del bucle | Al encontrar elemento |
continue |
Saltar iteración | Omitir elementos |
Git
| Comando | Función |
|---|---|
git init |
Inicializar repositorio |
git status |
Ver estado actual |
git add |
Preparar archivos |
git commit |
Guardar versión |
git log |
Ver historial |