🧪 Taller de Repaso
vistas

De Variables a Bucles: Taller Integrador

Ya viste variables, print(), cadenas, input(), tipos de datos, condicionales y bucles como temas separados. Este taller no enseña nada nuevo: te da 16 problemas cortos más un reto final, muchos de ellos adaptados del banco de preguntas de la Competencia de Programación de la UAB, para que combines todo lo que ya sabes resolviendo problemas de verdad.

RC
Ing. Roy Carrasco
Facultad de Ingeniería de Sistemas · UAB

Bienvenido

Este taller es la práctica integradora de todo lo visto hasta ahora: Variables, print(), String, input(), Tipos de Datos, Condicionales y Bucles. No repite la teoría de ninguna de esas guías — si algo no te suena, es el momento de volver a repasarla antes de seguir.

📎 Prerrequisito

Este taller asume que ya completaste las siete guías anteriores de POO. Ningún ejercicio usa nada que no se haya explicado ahí — ni listas indexadas (lista[0]), ni métodos como .append(), ni funciones propias: eso todavía no lo viste, y llega en la próxima guía.

💻 Código en vivo

Cada ejercicio trae un editor vacío: el enunciado te dice qué tenés que lograr, y vos escribís el código Python de cero. Presiona ▶ Ejecutar para correrlo de verdad en tu navegador con Pyodide (Python real compilado a WebAssembly). La primera ejecución tarda unos segundos porque descarga el intérprete.

✋ Se escribe a mano

En este taller, copiar y pegar código en los editores está deshabilitado (incluido arrastrar y soltar). La idea es que practiques escribiendo la sintaxis vos mismo, no que la traigas de otro lado.

🧩 Integrador

Cada bloque de ejercicios mezcla temas de más de una guía anterior.

🏆 Con banco real

Varios problemas están adaptados del banco de la Competencia de Programación UAB.

🎯 Reto final

Un problema más largo que combina todo, al estilo de un ejercicio de examen.

Zona de pruebas libres

Este bloque queda disponible durante todo el taller. Usalo en cualquier momento para probar una idea suelta, revisar cómo se comporta una instrucción, o experimentar algo que se te ocurra a mitad de un ejercicio — sin desordenar los bloques numerados.

🧪 Escribe cualquier código Python

1. Aritmética y entrada de datos

Tres problemas que combinan input(), conversión de tipos y operadores aritméticos (+, -, *, /, //, %).

Enunciado — 1.1: Celsius a Fahrenheit

Pide al usuario una temperatura en grados Celsius con input(), conviértela a float, y calcula la temperatura equivalente en Fahrenheit con la fórmula F = C * 9 / 5 + 32. Imprime el resultado con 2 decimales (usa round() o un f-string con :.2f).

✍️ Ejercicio 1.1 — Celsius a Fahrenheit
Enunciado — 1.2: Duración en milisegundos

Pide al usuario, con tres input() separados, cuántas horas, minutos y segundos duró algo (enteros). Calcula e imprime la duración total en milisegundos, sabiendo que 1 hora = 3.600.000 ms, 1 minuto = 60.000 ms y 1 segundo = 1.000 ms.

✍️ Ejercicio 1.2 — Duración en milisegundos
Enunciado — 1.3: Invertir un número de dos cifras

Pide un número entero de dos cifras (por ejemplo, 23) y calcula el número con las cifras invertidas (32) usando solo operadores aritméticos — // y %sin convertirlo a texto. Pista: la cifra de las unidades es numero % 10, y la de las decenas es numero // 10.

✍️ Ejercicio 1.3 — Invertir un número de dos cifras

2. Cadenas de texto

Cinco problemas sobre str: indexado, slicing, in, y algunos de los métodos que ya conoces de la guía de String.

Enunciado — 2.1: ¿Contiene la letra?

Pide una palabra y luego una sola letra. Usa el operador in para imprimir si esa letra aparece o no dentro de la palabra.

✍️ Ejercicio 2.1 — ¿Contiene la letra?
Enunciado — 2.2: Invertir una cadena

Pide una palabra e imprímela invertida, usando slicing con paso negativo ([::-1]) — sin bucles.

✍️ Ejercicio 2.2 — Invertir una cadena
Enunciado — 2.3: Contar vocales

Pide una frase. Recorre cada carácter con un for y cuenta cuántas vocales tiene en total (a, e, i, o, u — usa .lower() para que no importen las mayúsculas). Imprime el total.

✍️ Ejercicio 2.3 — Contar vocales
Enunciado — 2.4: ¿Es palíndromo?

Pide una palabra y di si es palíndroma (se lee igual al derecho y al revés, como "reconocer"). Usa .lower() para ignorar mayúsculas y compárala con su versión invertida.

✍️ Ejercicio 2.4 — ¿Es palíndromo?
Enunciado — 2.5: Contar palabras de una frase

Pide una frase e imprime cuántas palabras tiene, usando .split() (que separa por espacios y devuelve una lista) junto con len().

✍️ Ejercicio 2.5 — Contar palabras

3. Números con bucles

Cuatro clásicos que necesitan repetir instrucciones con while o for: no hay forma corta sin un bucle.

Enunciado — 3.1: Contar dígitos de un número

Pide un entero positivo y cuenta cuántos dígitos tiene, usando un while que lo vaya dividiendo entre 10 con // hasta llegar a 0.

✍️ Ejercicio 3.1 — Contar dígitos
Enunciado — 3.2: Factorial

Pide un entero n (mayor o igual a 0) y calcula su factorial (n! = n × (n-1) × ... × 1, y 0! = 1) usando un for con range().

✍️ Ejercicio 3.2 — Factorial
Enunciado — 3.3: ¿Es número primo?

Pide un entero mayor a 1 y di si es primo. Recorre con un for los posibles divisores entre 2 y numero - 1: si alguno divide exacto (% igual a 0), no es primo — puedes cortar el bucle con break apenas lo encuentres.

✍️ Ejercicio 3.3 — ¿Es primo?
Enunciado — 3.4: Primeros términos de Fibonacci

Pide cuántos términos n quiere ver el usuario, e imprime los primeros n términos de la sucesión de Fibonacci (cada término es la suma de los dos anteriores: 0, 1, 1, 2, 3, 5, 8, 13, ...). Usa dos variables para llevar "el actual" y "el siguiente", y actualízalas dentro de un bucle.

✍️ Ejercicio 3.4 — Fibonacci

4. Recorrer listas

En la guía de Tipos de Datos viste list solo como un tipo más, y en Bucles aprendiste a recorrer una con for elemento in lista. Todavía no viste indexado (lista[0]) ni métodos como .append() — no los necesitas para nada de esta sección: alcanza con recorrer y acumular.

Enunciado — 4.1: Suma de los números pares

Escribe en el editor la lista numeros = [4, 7, 10, 15, 22, 3, 8] y, con un for, suma solo los elementos pares. Imprime el total.

✍️ Ejercicio 4.1 — Suma de los pares
Enunciado — 4.2: El mayor de la lista

Con la lista edades = [19, 23, 18, 31, 22, 27], encuentra el valor más grande recorriéndola con un forsin usar la función max(). Pista: guarda el primer elemento como "el mayor hasta ahora" y compáralo con cada elemento siguiente.

✍️ Ejercicio 4.2 — El mayor de la lista
Enunciado — 4.3: Contar positivos

Con la lista valores = [5, -3, 8, -1, 0, 12, -7], cuenta cuántos elementos son estrictamente positivos (mayores a 0) e imprime el total.

✍️ Ejercicio 4.3 — Contar positivos
Enunciado — 4.4: Producto de todos los elementos

Con la lista factores = [2, 3, 4, 5], calcula el producto de todos sus elementos (2 × 3 × 4 × 5) recorriéndola con un for y acumulando en una variable que empieza en 1 (no en 0 — piensa por qué).

✍️ Ejercicio 4.4 — Producto de todos los elementos

Reto final: Boletín de notas del curso

Un solo problema que combina todo lo practicado en este taller: listas, bucles, condicionales, acumuladores y f-strings.

Datos de partida

Escribe en el editor esta lista (notas sobre 20, aprobado desde 11): notas = [15, 8, 20, 3, 12, 18, 6, 10, 19, 2]

Requisitos
  • 1. Con un for, calcula el promedio del curso (suma de todas las notas dividida entre la cantidad — usa len() para la cantidad). Imprímelo con 2 decimales.
  • 2. En el mismo recorrido (o en otro), cuenta cuántos estudiantes aprobaron (nota mayor o igual a 11) y cuántos reprobaron. Imprime ambos totales.
  • 3. Sin usar max() ni min(), encuentra la nota más alta y la nota más baja del curso. Imprímelas.
  • 4. Según el promedio que calculaste en el punto 1, imprime un mensaje con if/elif/else: "Buen rendimiento general" si el promedio es mayor o igual a 14, "Rendimiento regular" si está entre 11 y 14, o "Rendimiento bajo" si es menor a 11.
🏆 Resuelve aquí el reto

Cheat Sheet del taller

HerramientaPara qué la usaste hoy
int(input(...)) / float(input(...))Leer y convertir datos del usuario.
// y %División entera y resto, para separar cifras sin convertir a texto.
round(x, 2) / f"{x:.2f}"Mostrar decimales redondeados.
cadena[::-1]Invertir una cadena con slicing.
inComprobar si un carácter o valor está dentro de otro.
.lower() / .split() / len()Normalizar texto, separar palabras y contar.
while con //Repetir mientras un número siga teniendo cifras.
for i in range(...) + breakRecorrer un rango y cortar apenas se cumple una condición.
for elemento in listaRecorrer una lista sin necesitar índices.
Acumulador (suma = 0, producto = 1)Ir sumando o multiplicando dentro de un bucle.

¿Sabías que...?

🏆 De dónde salieron estos problemas

Varios ejercicios de este taller están inspirados en el banco de preguntas de nivel inicial de la Competencia de Programación UAB — vale la pena revisarlo si te gustó resolver este tipo de problemas.

🔢 El factorial crece muy rápido

20! ya es un número de 19 cifras. Python maneja enteros de tamaño arbitrario sin desbordarse, algo que muchos otros lenguajes no hacen sin ayuda extra.

🐢 ¿Por qué probar hasta n-1 para primos?

El ejercicio 3.3 revisa todos los divisores posibles, pero en realidad alcanza con probar hasta la raíz cuadrada de n: si no encontró ningún divisor hasta ahí, tampoco va a encontrar uno más grande. Es una optimización que vas a poder aplicar cuando veas funciones matemáticas más adelante.