0% encontró este documento útil (0 votos)
4 vistas12 páginas

Patrones Python Completo

El documento es un cuaderno de referencia sobre patrones de programación en Python, que abarca 16 patrones clave relacionados con control de flujo, estructuras de datos y enfoques Pythónicos. Cada patrón incluye una descripción de su propósito, cuándo usarlo y ejemplos de código. Se destacan técnicas como el uso de bucles, condicionales, listas, diccionarios y la importancia de elegir la estructura de datos adecuada.

Cargado por

Camilo Roncancio
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
4 vistas12 páginas

Patrones Python Completo

El documento es un cuaderno de referencia sobre patrones de programación en Python, que abarca 16 patrones clave relacionados con control de flujo, estructuras de datos y enfoques Pythónicos. Cada patrón incluye una descripción de su propósito, cuándo usarlo y ejemplos de código. Se destacan técnicas como el uso de bucles, condicionales, listas, diccionarios y la importancia de elegir la estructura de datos adecuada.

Cargado por

Camilo Roncancio
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Patrones Python

Cuaderno de referencia personal


16 patrones · Control de flujo · Estructuras de datos · Patrones Pythónicos

Parte 1 Parte 2
01 — Condición encadenada 08 — range(len()) vs enumerate()
02 — FOR con RANGE() 09 — Desempaquetado de tuplas
03 — Recorrer dos listas a la vez 10 — El -1 en menús (y cómo evitarlo)
04 — Acumulador 11 — Listas paralelas vs lista de tuplas
05 — Contador condicional 12 — Diccionario vs lista de tuplas
06 — Campeón vigente (máx/mín) 13 — .keys() .values() .items()
07 — Bucle infinito controlado 14 — Menús y submenús
15 — Despacho por diccionario
16 — Lista de diccionarios
PARTE 1 — Fundamentos de control de flujo

01 Condición encadenada IF / ELIF / ELSE

PARA QUÉ SIRVE Evaluar un valor contra múltiples rangos en orden. Python descarta
automáticamente los casos anteriores en cada elif, así no necesitas
escribir rangos dobles como 0 <= x < 10.

CUANDO USARLO Clasificar temperaturas, notas, edades, precios — cualquier valor que
caiga en uno de varios rangos.

Patrón de código
if valor < 0:
# caso A
elif valor < 10:
# caso B (ya sabemos que valor >= 0)
elif valor < 20:
# caso C (ya sabemos que valor >= 10)
else:
# todos los demás casos

💡 Python evalúa los elif en orden y se detiene en el primero verdadero — no necesitas repetir
la condición inferior.

02 Bucle FOR con RANGE() FOR

PARA QUÉ SIRVE Repetir una acción un número exacto de veces. range(1, 13) va del 1 al
12 — el último número nunca se incluye.

CUANDO USARLO Tablas de multiplicar, conteos fijos, generar series numéricas.

Patrón de código
for i in range(inicio, fin):
# i vale inicio, inicio+1, ..., fin-1
print(i)

💡 range(n) genera 0, 1, ..., n-1. range(1, n+1) genera 1, 2, ..., n. El segundo argumento es
exclusivo.
03 Recorrer dos listas a la vez FOR + LISTAS

PARA QUÉ SIRVE i es la posición — no un dato. Con esa posición entras a cualquier lista al
mismo tiempo. Clave para datos relacionados en listas paralelas.

CUANDO USARLO Estudiantes y notas, productos y precios, días y ventas, etc.

Patrón de código
nombres = ['Ana', 'Luis', 'Sofia']
notas = [50, 78, 80]

for i in range(len(nombres)):
print(nombres[i], notas[i])

💡 Cuando solo iteras, zip() es más limpio: for nombre, nota in zip(nombres, notas). Ver patrón
08 y 11.

04 Acumulador FOR + SUMA

PARA QUÉ SIRVE Sumar todos los valores de una lista iteración por iteración. La variable
empieza en 0 y crece en cada vuelta.

CUANDO USARLO Total de ventas, suma de notas, valor del inventario.

Patrón de código
total = 0

for i in range(len(lista)):
total += lista[i]

print(total)

💡 También puedes usar sum(lista) para listas simples, pero el acumulador manual permite
agregar condiciones dentro del bucle.
05 Contador condicional FOR + IF

PARA QUÉ SIRVE Contar cuántos elementos cumplen una condición. El contador solo sube
cuando la condición es verdadera.

CUANDO USARLO Contar reprobados, productos sin stock, ventas bajas.

Patrón de código
contador = 0

for i in range(len(lista)):
if lista[i] < 60:
contador += 1

print(contador)

💡 Combina acumulador y contador para calcular promedio: total / contador al final del bucle.

06 Campeón vigente (máximo y mínimo) FOR + IF + ÍNDICE

PARA QUÉ SIRVE Rastrear el índice del mayor o menor valor mientras se recorre la lista.
Guardar el índice permite acceder al nombre, valor y cualquier dato
relacionado al final.

CUANDO USARLO Mejor estudiante, producto más valioso, día con más ventas.

Patrón de código
campeon = 0 # asumo que el índice 0 gana
peor = 0 # asumo que el índice 0 pierde

for i in range(len(lista)):
if lista[i] > lista[campeon]: # más alto
campeon = i
if lista[i] < lista[peor]: # más bajo
peor = i

print(lista[campeon]) # el mayor
print(lista[peor]) # el menor
💡 Guardas el índice, no el valor — así puedes acceder a nombres[campeon], notas[campeon]
y cualquier otra lista paralela.

07 Bucle infinito controlado WHILE + IF +


BREAK

PARA QUÉ SIRVE Repetir indefinidamente hasta que se cumpla una condición. break es la
única salida del bucle — se coloca en el else cuando el usuario acierta o
completa la tarea.

CUANDO USARLO Adivinar un número, validar contraseña, menú de opciones.

Patrón de código
contador = 0

while True:
entrada = input('...')
contador += 1

if condicion_A:
print('pista A')
elif condicion_B:
print('pista B')
else:
print('¡Lograste!')
break # única salida

print(f'Intentos: {contador}')

💡 El break siempre va en el caso de éxito (else). Los casos de error van en los if/elif para dar
retroalimentación al usuario.
PARTE 2 — Estructuras de datos y patrones Pythónicos

08 range(len()) vs enumerate() FOR +


ENUMERATE

PARA QUÉ SIRVE Iterar una lista obteniendo el índice y el valor al mismo tiempo, sin
acceder manualmente con lista[i].

CUANDO USARLO Siempre que necesites el número de posición junto al valor mientras
recorres una lista.

Comparación
❌ Verboso:
for i in range(len(monedas)):
print(f"{i + 1}. {monedas[i]} (Tasa: {tasas[i]})")

✅ Pythónico:
for i, (moneda, tasa) in enumerate(zip(monedas, tasas), start=1):
print(f"{i}. {moneda} (Tasa: {tasa})")

Enfoque Resultado
range(len(...)) Verbose, acceso manual
enumerate(start=1) Índice desde 1 directo
enumerate + zip Sin índice manual — óptimo

💡 Si usas range(len(...)) para recorrer una lista, casi siempre hay una alternativa más limpia
con enumerate o zip.

09 Desempaquetado de tuplas TUPLAS

PARA QUÉ SIRVE Acceder a los valores individuales de una tupla asignándolos a variables
en un solo paso, sin usar índices.

CUANDO USARLO Cada vez que extraes datos de una tupla — especialmente en listas de
tuplas o diccionarios de tuplas.
Formas de acceso
Por índice (funciona, pero verbose):
tasas[0][0] # "USD"
tasas[0][1] # 4000

✅ Desempaquetado directo:
moneda, tasa = tasas[0]
# moneda = "USD"
# tasa = 4000

✅ Desempaquetado en el for (dos niveles):


for i, (moneda, tasa) in [Link]():
# ↑ ↑──────────↑
# clave tupla desempaquetada

💡 Cuando una tupla tiene 2 o más valores conocidos, siempre desempaqueta — el código
queda más legible y sin índices manuales.

10 El -1 en menús y cómo evitarlo ÍNDICES

PARA QUÉ SIRVE Entender por qué aparece el -1 al convertir la opción del usuario (1-N) al
índice de la lista (0-N-1), y cómo eliminarlo usando diccionario.

CUANDO USARLO Siempre que construyas un menú donde el usuario elige entre opciones
numeradas.

El problema
# Usuario elige 1, 2 o 3
# Lista indexa 0, 1 o 2
moneda, tasa = lista[opcion - 1] # -1 necesario

✅ Solución — diccionario con claves 1, 2, 3:


tasas = { 1: ("USD", 4000), 2: ("EUR", 4300), 3: ("BRL", 800) }
moneda, tasa = tasas[opcion] # sin -1

💡 Cuando el usuario elige por número en un menú, un diccionario con claves numéricas
elimina el -1 y hace el código más directo.
11 Listas paralelas vs lista de tuplas LISTAS / TUPLAS

PARA QUÉ SIRVE Evitar tener datos relacionados separados en dos listas cuando siempre
van juntos.

CUANDO USARLO Siempre que dos listas representen atributos de un mismo objeto
(moneda-tasa, nombre-nota, producto-precio).

Listas paralelas ❌ Lista de tuplas ✅


monedas = ["USD", "EUR"] tasas = [("USD",4000),("EUR",4300)]
tasas = [4000, 4300] — datos juntos desde el inicio —
Necesita zip para unirlas No necesita zip
Modificar = tocar 2 listas Modificar = tocar 1 lugar

💡 Si dos listas siempre van juntas, úsalas como lista de tuplas desde el inicio.

12 Cuándo usar diccionario vs lista de tuplas DICCIONARIO

PARA QUÉ SIRVE Elegir la estructura de datos correcta según si necesitas buscar por clave
o solo recorrer los datos.

CUANDO USARLO La regla es simple: ¿buscas por clave? → diccionario. ¿solo iteras? →
lista de tuplas.

Situación Estructura recomendada


Menú: usuario elige por número/código Diccionario menu[opcion]
Solo recorrer todos los datos en orden Lista de tuplas
Múltiples registros del mismo tipo Lista de diccionarios
Objeto con atributos nombrados Diccionario obj["campo"]

💡 Si te encuentras usando lista[opcion - 1] con un índice artificial, es señal de que un


diccionario encaja mejor.
13 .keys() .values() .items() DICCIONARIO

PARA QUÉ SIRVE Tres formas de iterar un diccionario según lo que necesites: solo claves,
solo valores, o ambos al mismo tiempo.

CUANDO USARLO Usa .items() cuando necesitas clave y valor juntos — es el más común en
menús y listas de tuplas.

Los tres métodos


tasas = { 1: ("USD", 4000), 2: ("EUR", 4300) }

[Link]() → 1, 2
[Link]() → ("USD",4000), ("EUR",4300)
[Link]() → (1,("USD",4000)), (2,("EUR",4300))

✅ .items() desempaqueta clave y tupla en un solo paso:


for i, (moneda, tasa) in [Link]():
print(f"{i}. {moneda} (Tasa: {tasa})")

💡 for i in tasas itera las claves por defecto, igual que .keys(). Usa .items() cuando también
necesitas el valor.

14 Estructura de menús y submenús DICCIONARIO +


TUPLAS

PARA QUÉ SIRVE Organizar menús de cualquier profundidad de forma escalable y sin
índices manuales.

CUANDO USARLO Cualquier programa con menú principal y submenús de opciones.

El patrón
menu = {
1: ("Calculadora de horas", { # tupla (texto, submenú)
1: "Horas totales",
2: "Horas diarias",
3: "Horas semanales"
}),
2: ("Calculadora directa", None), # None = sin submenú
3: ("Salir", None)
}

Acceso sin -1 en cada nivel


titulo, submenu = menu[1] # Nivel 1 → (texto, submenú)
moneda, tasa = submenu[2] # Nivel 2 → tupla de datos

Elemento Rol
Diccionario Navegar — el usuario elige por número
Tupla Transportar — carga el texto y el siguiente nivel
None Señal de que no hay submenú en esa opción

💡 Diccionario para navegar, tupla para transportar — el patrón se repite en cada nivel sin
importar qué tan profundo sea el menú.

15 Despacho por diccionario DICCIONARIO +


FUNCIONES

PARA QUÉ SIRVE Reemplazar cadenas largas de elif con un diccionario que mapea
opciones a funciones, haciendo el código escalable.

CUANDO USARLO Cualquier menú donde cada opción llama a una función diferente.

❌ Cadena de elif (poco escalable):


elif opcion == 1:
calculadora_de_tiempos()
elif opcion == 2:
calculadora_de_horas()
elif opcion == 3:
calculadora_de_semestres()

✅ Despacho por diccionario:


acciones = {
1: calculadora_de_tiempos,
2: calculadora_de_horas,
3: calculadora_de_semestres
}
acciones[opcion]() # sin submenú
acciones[opcion](submenu) # con submenú

💡 Agregar una nueva opción = 1 línea en el diccionario menu + 1 línea en acciones. No se toca
el while ni los if.

16 Lista de diccionarios para registros LISTAS +


DICCIONARIOS

PARA QUÉ SIRVE Almacenar múltiples registros del mismo tipo (filas de una tabla) de forma
fácil de recorrer, filtrar y exportar.

CUANDO USARLO Captura de datos con campos fijos: institución, cargo, fecha, estado. Es el
puente natural hacia pandas y bases de datos.

Estructura
registros = [
{ "institucion": "SoiTTech", "cargo": "Dev", "valido": True },
{ "institucion": "Empresa X", "cargo": "Analista", "valido": False }
]

Operaciones comunes
# Recorrer
for r in registros:
print(r["institucion"], r["cargo"])

# Filtrar
validos = [r for r in registros if r["valido"]]

# Exportar a Excel
import pandas as pd
df = [Link](registros) # directo a Excel, CSV, JSON

💡 Lista de diccionarios = datos tabulares en Python. Es exactamente lo que devuelven las


bases de datos y las APIs.
Resumen — Modelo mental completo

Patrón Usar cuando...


01 — Condición encadenada Clasificar un valor en rangos
02 — FOR con RANGE() Repetir un número exacto de veces
03 — Recorrer dos listas Datos relacionados en listas paralelas
04 — Acumulador Sumar valores de una lista
05 — Contador condicional Contar elementos que cumplen condición
06 — Campeón vigente Encontrar máximo o mínimo con su posición
07 — Bucle infinito Repetir hasta condición de éxito
08 — enumerate() Iterar con índice desde 1
09 — Desempaquetado de tuplas Extraer valores de tupla sin índices
10 — Evitar el -1 Menú con opciones numéricas
11 — Lista de tuplas Datos relacionados que solo se recorren
12 — Diccionario vs tuplas ¿Buscas por clave? → diccionario
13 — .keys() .values() .items() Iterar diccionario con o sin clave
14 — Menús y submenús Navegación por niveles sin -1
15 — Despacho por diccionario Reemplazar cadena de elif con funciones
16 — Lista de diccionarios Múltiples registros con los mismos campos

💡 Flujo recomendado: escribe la lógica suelta → prueba → envuelve en función → prueba →


integra al menú.

También podría gustarte