Aprende programación con teoría clara, analogías de la vida real, ejercicios resueltos en tres niveles, simuladores interactivos tipo juego y quizzes de repaso. Lenguaje: Python.
Bucles que repiten instrucciones. La función range(), el paso (step), contadores y acumuladores. Cuándo usar for y cómo trazar su ejecución.
La librería random: randint, random, uniform, choice, sample y shuffle. Cómo simular dados, sorteos y juegos de azar con código.
Bloques de código reutilizable. Funciones con retorno (return) y sin retorno. Parámetros y argumentos. La diferencia entre print y return.
Listas que guardan muchos valores. Índices, recorrido con for, suma, promedio, máximo, mínimo. La base de las estructuras de datos.
Este dashboard incluye 5 simuladores interactivos: traza un bucle for paso a paso, lanza dados con random, construye funciones, explora arreglos y juega "Adivina el número". ¡La mejor forma de aprender a programar es programando!
A lo largo de los temas reutilizaremos: condicionales (if / else / elif — simples, compuestas y anidadas), contadores (variables que cuentan ocurrencias) y acumuladores (variables que suman valores). Verás cómo se combinan con los nuevos temas.
El bucle for permite repetir un bloque de instrucciones un número conocido de veces, sin escribir el mismo código una y otra vez.
Un bucle for es una estructura de control que repite un bloque de código un número determinado de veces. Se usa cuando sabemos (o podemos calcular) cuántas veces queremos repetir algo.
range(5) → 0,1,2,3,4 · range(2,6) → 2,3,4,5 · range(0,10,2) → 0,2,4,6,8. El límite final nunca se incluye.
Las repeticiones en el gimnasio: cuando tu entrenador dice "haz 10 sentadillas", no escribe "sentadilla, sentadilla, sentadilla…" 10 veces. Simplemente dice "repite 10 veces".
Otras analogías cotidianas:
Variable que cuenta cuántas veces ocurre algo. Siempre suma una cantidad fija (normalmente 1).
Variable que suma valores variables. Acumula un total que va creciendo según los datos.
Un acumulador de suma se inicializa en 0. Un acumulador de multiplicación (productorio) se inicializa en 1, porque cualquier número multiplicado por 0 daría 0.
Dentro de un for podemos usar if / else para tomar decisiones en cada iteración. Por ejemplo, contar solo los números pares:
Ve a la sección Simuladores / Juegos en la barra lateral y prueba el "Trazador de bucle For": cambia inicio, fin y paso, y observa en tiempo real qué valores genera el bucle.
Escribe un programa que imprima los números del 1 al 10, cada uno en una línea.
Explicación: range(1, 11) genera del 1 al 10 (el 11 no se incluye). En cada vuelta, la variable num toma el siguiente valor y se imprime.
Imprime la tabla de multiplicar del 7 (del 7×1 al 7×12).
Explicación: el bucle va de 1 a 12. En cada vuelta multiplica 7 por el valor actual de i y muestra el resultado con formato.
Pide al usuario un número N y calcula la suma de todos los números del 1 hasta N usando un acumulador.
Clave: usamos n + 1 en el range para que N sí se incluya. El acumulador suma va guardando el total.
Cuenta cuántos múltiplos de 3 hay entre 1 y 50, y muéstralos.
Combina for + if + contador: el operador % (módulo) da el residuo. Si num % 3 == 0, es múltiplo de 3.
Calcula el factorial de un número N. Recuerda: 5! = 5×4×3×2×1 = 120. Usa un acumulador de multiplicación.
¡Importante! El acumulador de multiplicación inicia en 1. Si iniciara en 0, todo el resultado sería 0.
Dibuja un triángulo de asteriscos de 5 filas (fila 1 = 1 asterisco, fila 5 = 5 asteriscos) usando bucles for anidados.
Bucles anidados: el for externo controla las filas; el interno dibuja los asteriscos de cada fila. En la fila N se dibujan N asteriscos.
Una bodega registra las ventas del día. El programa debe pedir cuántas ventas hubo, luego solicitar el monto de cada venta, y al final mostrar el total recaudado y cuántas ventas superaron los S/50.
Combina: for (repetir por cada venta) + acumulador (total) + condicional + contador (ventas altas).
Un profesor registra la asistencia de su salón. Para N alumnos, pregunta si asistió (s/n). Al final debe mostrar cuántos asistieron, cuántos faltaron y el porcentaje de asistencia.
Combina: for + condicional + contador, y luego un cálculo de porcentaje con el total.
El centro espacial necesita una cuenta regresiva. Imprime del 10 al 1 (uno por línea) y al terminar muestra "¡DESPEGUE! 🚀". Usa un for con paso negativo.
Clave: range(10, 0, -1) cuenta hacia atrás. El límite 0 no se incluye, por eso llega hasta 1. Pruébalo en el simulador "Trazador de For".
Una empresa tiene N empleados. Por cada uno se ingresa su sueldo. Si el sueldo es menor a S/1025 (RMV en Perú), se le otorga un bono de S/100. Calcula el total de la planilla incluyendo los bonos y cuántos empleados recibieron bono.
Combina: for + condicional (modifica el sueldo) + contador + acumulador. El bono se suma antes de acumular.
Una maestra de primaria necesita imprimir las tablas de multiplicar del 1 al 5 (cada una del ×1 al ×10). Usa bucles for anidados.
For anidado: el bucle externo recorre las tablas (1-5); el interno genera las multiplicaciones (1-10) de cada tabla. En total imprime 50 multiplicaciones.
i += 1 es una forma abreviada de escribir i = i + 1. Toma el valor actual de i, le suma 1 y lo guarda de nuevo en i. Funciona igual con otros operadores: suma += x es suma = suma + x, y prod *= x es prod = prod * x.range(10, 0, -1) cuenta de 10 hasta 1 hacia atrás. El primer número es el inicio (10), el segundo el límite (0, no incluido) y el tercero el paso (-1). Es útil para cuentas regresivas. Pruébalo en el simulador de la sección de juegos.La librería random de Python permite generar números y elegir elementos al azar. Es la base de juegos, simulaciones, sorteos y mucho más.
random es una librería de Python que genera números pseudoaleatorios. Para usarla, primero hay que importarla:
Las computadoras no generan azar real; usan algoritmos que producen secuencias que parecen aleatorias. Para casi todos los usos (juegos, simulaciones), funcionan perfectamente.
Cada vez que necesites algo "al azar" en un programa, la librería random tiene una función para ello.
| Función | ¿Qué hace? | Ejemplo | Resultado posible |
|---|---|---|---|
randint(a, b) | Entero aleatorio entre a y b (ambos incluidos) | randint(1, 6) | 4 |
random() | Decimal aleatorio entre 0.0 y 1.0 | random() | 0.7234 |
uniform(a, b) | Decimal aleatorio entre a y b | uniform(1, 10) | 6.83 |
choice(lista) | Elige UN elemento al azar | choice(["a","b","c"]) | "b" |
sample(lista, k) | Elige k elementos ÚNICOS (sin repetir) | sample(range(1,50), 6) | [4, 18, 22, 31, 39, 45] |
shuffle(lista) | Desordena/mezcla la lista original | shuffle(mazo) | la lista queda revuelta |
Da enteros: 1, 2, 3, 4, 5 o 6. Ambos extremos incluidos. Ideal para dados, edades, cantidades.
Da un decimal entre 0.0 y 1.0. Útil para probabilidades (ej: si random() < 0.3 → 30% de probabilidad).
Da un decimal en el rango que elijas. Útil para precios, temperaturas, medidas con decimales.
En la sección Simuladores / Juegos encontrarás el "Laboratorio de random": lanza dados, observa la distribución de resultados y prueba choice con frutas. También está el juego "Adivina el número" que combina random con condicionales.
Simula el lanzamiento de un dado de 6 caras y muestra el resultado.
Explicación: randint(1, 6) incluye tanto el 1 como el 6, igual que un dado real.
Tienes una lista de participantes de un sorteo. Elige uno al azar como ganador.
Explicación: choice() selecciona un elemento al azar de la lista. Perfecto para sorteos.
Simula el lanzamiento de dos dados 10 veces y muestra la suma de cada lanzamiento. Combina for + random.
Combina for + random: el bucle repite 10 veces; en cada vuelta se generan dos dados nuevos y se suma.
Genera 6 números únicos (sin repetir) del 1 al 49 para un billete de lotería, y muéstralos ordenados.
¿Por qué sample y no choice? En la lotería los números NO se repiten. sample() garantiza elementos únicos; choice() podría repetir.
El programa piensa un número del 1 al 100. El usuario intenta adivinarlo y el programa le dice si su intento es muy alto o muy bajo. Cuenta los intentos.
Combina random + while + condicionales anidadas + contador. ¡Pruébalo en el simulador "Adivina el número"!
Lanza un dado 1000 veces y cuenta cuántas veces salió cada número (del 1 al 6). Esto demuestra que con muchas tiradas, la distribución se vuelve pareja.
Combina random + for + arreglo de contadores. Cada cara debería salir alrededor de 166 veces (1000/6). ¡Es un adelanto del tema de arreglos!
Una empresa hace un sorteo entre sus clientes. De una lista de participantes, elige 3 ganadores distintos (sin que se repitan) y los anuncia numerados.
Combina: sample (elementos únicos, nadie gana 2 veces) + for (para numerar y mostrar a cada ganador).
Dos jugadores juegan 5 rondas. En cada ronda ambos lanzan un dado; gana quien saque el número mayor (empate no suma). Al final declara quién ganó más rondas.
Combina: random (dados) + for (5 rondas) + condicionales anidadas (if/elif) + dos contadores. ¡Como el simulador de dados pero con dos jugadores!
Un sistema necesita generar contraseñas temporales de 6 caracteres, eligiendo al azar de un conjunto de letras y números. Genera y muestra una contraseña.
Combina: choice (elige 1 carácter) + for (repite 6 veces) + acumulador de texto (concatena con +=). Nota: se omiten letras confusas como I, L, O, 0, 1.
Una app del clima simula el pronóstico de una semana (7 días). Cada día puede ser soleado, nublado o lluvioso (al azar). Muestra el clima de cada día y cuenta cuántos días hubo de cada tipo.
Combina: choice (clima al azar) + for (7 días) + condicionales (if/elif/else) + tres contadores.
Para una clase de probabilidad, lanza una moneda 100 veces. Cuenta cuántas caras y cuántos sellos salieron, y muestra el porcentaje de cada uno. ¿Se acerca al 50%?
Combina: random + for (100 veces) + condicional + contadores. Demuestra la ley de los grandes números: a más lanzamientos, más se acerca al 50/50.
import random le dice a Python: "voy a usar estas herramientas". Sin el import, Python no reconoce funciones como randint() y dará un error. Es como sacar una caja de herramientas antes de empezar a trabajar.randint(1, 6) incluye ambos extremos → puede dar 1, 2, 3, 4, 5 o 6. randrange(1, 6) funciona como range → NO incluye el 6, da 1, 2, 3, 4 o 5. Para simular un dado usa randint, que es más intuitivo.shuffle() modifica la lista ORIGINAL directamente (in-place) y devuelve None. Por eso se escribe random.shuffle(mazo) y NO mazo = random.shuffle(mazo) (esto último pondría None en mazo). Si quieres conservar la original, haz una copia antes.Bloques de código con nombre que podemos reutilizar. Las funciones evitan repetir código y organizan los programas en piezas manejables.
Una función es un bloque de código con nombre que realiza una tarea específica. Se define una vez y se puede usar (llamar) las veces que quieras.
Evitan repetir código (principio DRY: Don't Repeat Yourself), organizan el programa, facilitan corregir errores y permiten reutilizar lógica.
Una licuadora: le pones ingredientes (entrada/argumentos), realiza un proceso interno (el código) y te devuelve un jugo (return). No necesitas saber cómo funciona por dentro; solo la usas.
Otras analogías:
Usa return para devolver un valor que puede guardarse y reutilizarse.
Realiza una acción (como imprimir) pero no devuelve un valor. Retorna None implícitamente.
print muestra algo en pantalla pero el valor se "pierde". return entrega un valor que puedes guardar en una variable y seguir usando en cálculos posteriores. Una función puede calcular con return y luego tú decides si imprimirlo.
| Concepto | Qué es | Dónde aparece |
|---|---|---|
| Parámetro | Variable en la DEFINICIÓN de la función | def sumar(a, b): → a y b |
| Argumento | Valor REAL que se pasa al LLAMAR | sumar(5, 3) → 5 y 3 |
| Retorno | Valor que la función DEVUELVE | return a + b → el resultado |
En Simuladores / Juegos está el "Constructor de funciones": elige una operación, ingresa dos números y observa cómo se construye la función y qué valor retorna.
Crea una función sin retorno llamada saludar que reciba un nombre e imprima "Hola, [nombre]! Bienvenido".
Sin retorno: solo imprime, no devuelve valor. El parámetro es nombre; el argumento es "Rodrigo".
Crea una función con retorno que calcule el área de un rectángulo (base × altura).
Con retorno: devuelve el área y la guardamos en resultado para usarla después.
Crea una función que reciba un número y retorne el texto "par" o "impar" según corresponda (usa condicional dentro de la función).
Función + condicional: el return puede estar dentro de un if. La función decide qué texto devolver.
Crea una función que reciba 3 notas, retorne el promedio, e indica si el alumno aprobó (promedio ≥ 11 en la escala peruana).
Combina función con retorno + condicional fuera de la función. La función calcula; el programa decide qué hacer con el resultado.
Crea una función que reciba una contraseña y retorne True si tiene al menos 8 caracteres, o False si no. Luego úsala para validar.
Función que retorna booleano (True/False): muy usada para validaciones. len() cuenta los caracteres del texto.
Crea dos funciones: una que convierta Celsius a Fahrenheit y otra de Fahrenheit a Celsius. Úsalas en un bucle para convertir varias temperaturas.
Reutilización + for: definimos las funciones una vez y las usamos para muchas conversiones. round(f, 1) redondea a 1 decimal.
Una tienda necesita calcular el precio final (con IGV del 18%) de varios productos. Crea una función agregar_igv(precio) que retorne el precio con IGV, y aplícala a una lista de precios.
Combina: función con retorno (calcula IGV) + for (recorre los precios y reutiliza la función en cada uno).
Crea una función es_primo(n) que retorne True si el número es primo. Úsala para listar todos los números primos del 1 al 30.
Combina: función con for ANIDADO interno (busca divisores) + return booleano + for externo que la usa. ¡Una función puede tener su propio bucle dentro!
Crea una función lanzar_dado() que retorne un valor aleatorio del 1 al 6. Llámala 3 veces, suma los resultados; si la suma supera 12, el jugador gana.
Combina: función con random (encapsula el lanzamiento) + for + acumulador + condicional. ¡Ya estamos juntando 3 temas!
En un colegio se usa escala literal. Crea una función nota_a_letra(nota) que reciba una nota (0-20) y retorne: AD (18-20), A (14-17), B (11-13) o C (0-10). Aplícala a varias notas.
Combina: función con condicionales encadenadas (if/elif/else) + return + for que la aplica a una lista de notas.
Un e-commerce aplica descuentos: clientes VIP tienen 20% y los regulares 5%. Crea una función precio_final(precio, tipo) que retorne el precio con descuento. Calcula el total de un carrito de un cliente VIP.
Combina: función con 2 parámetros + condicional + for + acumulador. La función decide el descuento y el bucle suma el carrito completo.
print muestra texto en pantalla, pero ese valor se pierde (no lo puedes usar después). return entrega un valor que puedes guardar en una variable y seguir usando en cálculos. Ejemplo: si una función retorna 8, puedes hacer x = funcion() y luego x * 2. Si solo hiciera print(8), no podrías reutilizar ese 8.None (que significa "nada" o "ningún valor"). Esto es normal en funciones que solo realizan acciones, como imprimir o modificar algo. Si intentas guardar su resultado (x = funcion_sin_return()), x valdrá None.calcular_factura() podría llamar a calcular_subtotal() y calcular_igv().Estructuras que guardan muchos valores en una sola variable, organizados por posición (índice). En Python se implementan con listas.
Un arreglo unidimensional es una estructura que almacena varios valores en una sola variable, organizados en posiciones numeradas llamadas índices. En Python usamos listas.
El primer elemento es índice [0], NO [1]. Si la lista tiene 5 elementos, los índices van del 0 al 4.
Un edificio de departamentos: el edificio es la lista, cada departamento es un elemento, y el número de cada puerta es el índice. Para visitar al vecino del depto 0, dices edificio[0].
Otras analogías:
| Operación | Código | Resultado (con [14,11,16,8,19]) |
|---|---|---|
| Acceder a un elemento | notas[2] | 16 |
| Cantidad de elementos | len(notas) | 5 |
| Agregar al final | notas.append(20) | [14,11,16,8,19,20] |
| Suma de todos | sum(notas) | 68 |
| Valor máximo | max(notas) | 19 |
| Valor mínimo | min(notas) | 8 |
Recorre directamente los elementos.
Usa range(len()) para acceder por posición.
En Simuladores / Juegos está el "Explorador de arreglos": agrega elementos, genera arreglos aleatorios y ejecuta operaciones (suma, promedio, máximo, mínimo, pares) viendo cómo se resaltan las celdas.
Dada la lista de frutas ["manzana", "plátano", "naranja"], muestra cada fruta con su posición.
range(len()) genera los índices 0, 1, 2 para acceder a cada elemento por posición.
Calcula la suma de todos los elementos de [10, 25, 30, 15] usando un acumulador.
Acumulador + for sobre lista: recorre cada elemento sumándolo al total.
Dada una lista de edades, cuenta cuántas personas son mayores de edad (≥ 18 años).
Arreglo + for + if + contador: recorre las edades y cuenta las que cumplen la condición.
Encuentra el valor máximo de [23, 8, 45, 16, 4, 42] SIN usar la función max().
Técnica clásica: empezamos asumiendo que el primero es el mayor, luego comparamos con cada elemento y actualizamos cuando encontramos uno más grande.
Dada una lista de números, crea dos listas nuevas: una con los pares y otra con los impares.
append() + condicional: según el residuo, cada número va a una lista distinta. Empezamos con dos listas vacías.
Dado un arreglo de notas, calcula: el promedio, la nota más alta, la más baja, y cuántos aprobaron (≥11). Combina todo lo aprendido.
¡El ejercicio integrador! Combina arreglo + for + condicionales + acumulador + contador + len() en un solo recorrido eficiente.
Estos casos combinan los 4 temas del curso. Son el tipo de problemas que resolverás en evaluaciones y en proyectos reales. Tómate tu tiempo, intenta resolverlos antes de ver la solución.
Una academia desea registrar los puntajes de 10 estudiantes en un examen. El programa debe:
registrar_puntajes() que solicite los 10 puntajes y los almacene en un arreglo.calcular_promedio() que reciba el arreglo y retorne el promedio.Integra: 2 funciones (una sin parámetro que retorna arreglo, otra que lo recibe) + for + append + acumulador + búsqueda de máx/mín con condicionales.
Una bodega tiene el stock de sus productos en un arreglo. Crea una función contar_por_agotarse() que reciba el arreglo y retorne cuántos productos tienen stock menor a 5 unidades. Muestra una alerta con el resultado.
Integra: función que recibe arreglo + for + condicional + contador + return, y condicional final para la alerta.
Un restaurante simula 20 calificaciones de clientes (de 1 a 5 estrellas) generadas al azar. Guárdalas en un arreglo, calcula el promedio con una función, y cuenta cuántos clientes dieron 5 estrellas.
Integra: random (genera datos) + arreglo (los guarda) + función (promedio) + for + contador. ¡Los 4 temas juntos!
Una estación meteorológica registró las temperaturas de 7 días. Crea funciones para el promedio, la máxima y la mínima. Luego cuenta cuántos días superaron el promedio semanal.
Integra: 3 funciones (cada una con su for interno) + arreglo + for + contador. Demuestra cómo organizar el código en funciones reutilizables.
Proyecto integrador final. Una tienda simula las ventas de 30 días (montos aleatorios entre S/100 y S/1000). El programa debe:
🏆 Integra TODO el curso: random (genera ventas) + arreglo (las guarda) + 2 funciones (una llama a la otra) + for + acumulador + búsqueda de máx/mín + contador. Este es el nivel de un examen final o proyecto.
IndexError: list index out of range. Por ejemplo, si la lista tiene 3 elementos (índices 0, 1, 2) e intentas acceder a lista[3], dará error porque ese índice no existe. Siempre verifica que el índice esté dentro del rango con len().lista.append(x) agrega UN elemento al final de la lista. lista + [x] crea una lista NUEVA combinando ambas (no modifica la original). Para agregar elementos uno por uno dentro de un bucle, usa append(), que es más eficiente.array y la librería numpy con arreglos más estrictos y eficientes para cálculos numéricos. Para aprender, las listas son perfectas.Practica los conceptos de forma visual e interactiva. Cambia valores, ejecuta y observa qué hace el código en tiempo real. ¡Aprender programando!
12 preguntas sobre Estructura For y Números Aleatorios. Mezcla de opción múltiple y Verdadero/Falso. ¡Retroalimentación inmediata!
12 preguntas sobre Funciones y Arreglos Unidimensionales. Mezcla de opción múltiple y Verdadero/Falso. ¡Demuestra lo aprendido!
Repasaste los 4 temas, resolviste ejercicios en tres niveles, practicaste con los 5 simuladores y pusiste a prueba tu conocimiento. ¡Recuerda: la programación se aprende practicando todos los días!