Operadores en Python — ejercicios reales con solución y chuletario
Los operadores en Python ejercicios con contexto real son la mejor forma de afianzar lo que vimos en teoría y práctia. En este artículo encontrarás cinco ejercicios en tres niveles de dificultad: básico, intermedio y desafío final, con especial foco en % y // que son los operadores que más confunden.
Como siempre: intenta resolverlo, usa la pista si llevas más de 10 minutos atascado, y compara con la solución comentada al final, dispones de pythontutor.com para profundizar el aprendizaje
Tabla de Contenidos
Cómo usar este artículo
Lee el enunciado → intenta resolverlo en VS Code → si no avanzas, lee la pista → compara tu solución con la del final. No saltes a las soluciones directamente, aprendes el doble resolviéndolo tú.
Estos operadores en Python ejercicios están ordenados de menos a más difícil para que puedas ir a tu ritmo.
Operadores en Python Ejercicios — Nivel básico
Ejercicio 1 — Factura del gimnasio
Un gimnasio cobra una cuota mensual base de 29.99€. Si el socio lleva más de 12 meses, tiene un descuento del 10%. Escribe un programa que pida los meses que lleva el socio y calcule cuánto paga ese mes, cuánto ha pagado en total y cuánto se ha ahorrado si tiene descuento.
La salida debe ser:
Meses como socio: 15 --- Factura del gimnasio --- Cuota base: 29.99 € Descuento (10%): -3.0 € Cuota este mes: 26.99 € Total pagado: 434.85 € Ahorro acumulado: 9.0 €
💡 Pista: Usa * para calcular el descuento y el total pagado. El total pagado son los primeros 12 meses a precio completo más los meses restantes con descuento. Usa // y % para separar los meses en dos tramos.
Ejercicio 2 — Conversor de tiempo
Escribe un programa que pida un número de segundos y lo convierta a horas, minutos y segundos. Por ejemplo 3723 segundos son 1 hora, 2 minutos y 3 segundos.
La salida debe ser:
Segundos: 3723 3723 segundos son: → 1 hora/s → 2 minuto/s → 3 segundo/s
💡 Pista: Este ejercicio es puro // y %. Las horas son segundos // 3600. Los minutos restantes son (segundos % 3600) // 60. Los segundos restantes son segundos % 60.
Operadores en Python Ejercicios — Nivel intermedio
Ejercicio 3 — Análisis de una nota
Escribe un programa que pida una nota del 0 al 100 y calcule la nota sobre 10, el porcentaje que representa, si está aprobado (≥50 sobre 100), cuántos puntos le faltan para el siguiente nivel (notable ≥70, sobresaliente ≥90) y cuántos puntos le sobran respecto al aprobado.
Nota (0-100): 73 --- Análisis de nota --- Nota sobre 10: 7.3 Porcentaje: 73.0% ¿Aprobado?: True Siguiente nivel: Sobresaliente (faltan 17 puntos) Puntos sobre el aprobado: 23
💡 Pista: La nota sobre 10 es nota / 10. El porcentaje es nota * 100 / 100 — es decir, la nota directamente. Para los puntos que faltan necesitas comparar con 70 y 90 usando > y -. Usa % para calcular cuántos puntos sobran respecto al siguiente múltiplo de 10.
Ejercicio 4 — Extractor de dígitos
Escribe un programa que pida un número entero de exactamente 4 cifras y extraiga cada dígito por separado usando solo // y %. Sin usar strings, sin convertir a texto — solo operadores matemáticos.
Número de 4 cifras: 2847 --- Dígitos de 2847 --- Millares: 2 Centenas: 8 Decenas: 4 Unidades: 7 Suma de dígitos: 21 ¿Es divisible por 3?: True (porque la suma de dígitos es divisible por 3)
💡 Pista: Unidades = n % 10. Decenas = (n // 10) % 10. Centenas = (n // 100) % 10. Millares = n // 1000. La divisibilidad por 3 se comprueba con suma % 3 == 0.
Operadores en Python Ejercicios — Desafío Final
Ejercicio 5 — Gestor de caja registradora
Este ejercicio mezcla todos los operadores. Escribe un programa que simule una caja registradora básica. Pide el importe total de la compra y el dinero entregado por el cliente, y calcula el cambio desglosado en billetes y monedas (de mayor a menor: 50€, 20€, 10€, 5€, 2€, 1€, 0.50€, 0.20€, 0.10€, 0.05€, 0.02€, 0.01€).
Importe de la compra (€): 37.43 Dinero entregado (€): 50 --- Caja registradora --- Importe: 37.43 € Entregado: 50.0 € Cambio: 12.57 € --- Desglose del cambio --- 1 billete de 10 € 1 billete de 2 € 1 moneda de 0.5 € 0 monedas de 0.05 € 1 moneda de 0.02 €
💡 Pistas:
- Convierte el cambio a céntimos multiplicando por 100 y redondeando con
int(round(...)), evita errores de decimales flotantes - Para cada denominación:
cantidad = cambio_centimos // denominacion_centimosy luegocambio_centimos = cambio_centimos % denominacion_centimos - Las denominaciones en céntimos son: 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1
- Solo muestra las denominaciones donde la cantidad sea mayor que 0
Soluciones Comentadas
Solución Ejercicio 1:
# Factura del gimnasio
CUOTA_BASE = 29.99
DESCUENTO = 0.10
MESES_MINIMOS = 12
meses = int(input("Meses como socio: "))
if meses > MESES_MINIMOS:
descuento_euros = round(CUOTA_BASE * DESCUENTO, 2)
cuota_mes = round(CUOTA_BASE - descuento_euros, 2)
meses_con_descuento = meses - MESES_MINIMOS
total = round(CUOTA_BASE * MESES_MINIMOS + cuota_mes * meses_con_descuento, 2)
ahorro = round(descuento_euros * meses_con_descuento, 2)
else:
descuento_euros = 0
cuota_mes = CUOTA_BASE
total = round(CUOTA_BASE * meses, 2)
ahorro = 0
print(f"\n--- Factura del gimnasio ---")
print(f"Cuota base: {CUOTA_BASE} €")
print(f"Descuento (10%): -{descuento_euros} €")
print(f"Cuota este mes: {cuota_mes} €")
print(f"Total pagado: {total} €")
print(f"Ahorro acumulado: {ahorro} €")
Solución Ejercicio 2:
# Conversor de tiempo
segundos = int(input("Segundos: "))
horas = segundos // 3600
minutos_restantes = (segundos % 3600) // 60
segs_restantes = segundos % 60
print(f"\n{segundos} segundos son:")
print(f"→ {horas} hora/s")
print(f"→ {minutos_restantes} minuto/s")
print(f"→ {segs_restantes} segundo/s")
Solución Ejercicio 3:
# Análisis de nota
nota = float(input("Nota (0-100): "))
nota_sobre_10 = round(nota / 10, 1)
porcentaje = nota
aprobado = nota >= 50
if nota < 70:
siguiente = "Notable"
faltan = round(70 - nota, 1)
elif nota < 90:
siguiente = "Sobresaliente"
faltan = round(90 - nota, 1)
else:
siguiente = "Ya tienes sobresaliente"
faltan = 0
puntos_sobre_aprobado = round(nota - 50, 1) if nota >= 50 else 0
print(f"\n--- Análisis de nota ---")
print(f"Nota sobre 10: {nota_sobre_10}")
print(f"Porcentaje: {porcentaje}%")
print(f"¿Aprobado?: {aprobado}")
if faltan > 0:
print(f"Siguiente nivel: {siguiente} (faltan {faltan} puntos)")
else:
print(f"Nivel: {siguiente}")
print(f"Puntos sobre el aprobado: {puntos_sobre_aprobado}")
Solución Ejercicio 4:
# Extractor de dígitos
n = int(input("Número de 4 cifras: "))
unidades = n % 10
decenas = (n // 10) % 10
centenas = (n // 100) % 10
millares = n // 1000
suma = unidades + decenas + centenas + millares
divisible_3 = suma % 3 == 0
print(f"\n--- Dígitos de {n} ---")
print(f"Millares: {millares}")
print(f"Centenas: {centenas}")
print(f"Decenas: {decenas}")
print(f"Unidades: {unidades}")
print(f"Suma de dígitos: {suma}")
print(f"¿Es divisible por 3?: {divisible_3} (porque la suma de dígitos es divisible por 3)")
Solución Ejercicio 5:
# Caja registradora
importe = float(input("Importe de la compra (€): "))
entregado = float(input("Dinero entregado (€): "))
cambio = round(entregado - importe, 2)
cambio_centimos = int(round(cambio * 100))
denominaciones = [5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1]
nombres = ["50 €", "20 €", "10 €", "5 €", "2 €", "1 €",
"0.50 €", "0.20 €", "0.10 €", "0.05 €", "0.02 €", "0.01 €"]
print(f"\n--- Caja registradora ---")
print(f"Importe: {importe} €")
print(f"Entregado: {entregado} €")
print(f"Cambio: {cambio} €")
print(f"\n--- Desglose del cambio ---")
for i in range(len(denominaciones)):
cantidad = cambio_centimos // denominaciones[i]
cambio_centimos = cambio_centimos % denominaciones[i]
if cantidad > 0:
print(f"{cantidad} {'billete' if denominaciones[i] >= 500 else 'moneda'} de {nombres[i]}")
Chuletario — Operadores en Python Ejercicios
# ============================================ # CHULETARIO — Operadores en Python # Sergio Learns · sergiolearns.com # ============================================ # OPERADORES ARITMÉTICOS 5 + 3 # suma → 8 5 - 3 # resta → 2 5 * 3 # multiplicar → 15 5 / 2 # dividir → 2.5 (siempre float) 5 // 2 # div entera → 2 (redondea abajo) 5 % 2 # módulo → 1 (resto) 5 ** 2 # potencia → 25 # TRAMPAS COMUNES 10 / 2 # → 5.0 NO es 5 (es float) 10 // 2 # → 5 esto sí es entero "%" NO es porcentaje — es el RESTO de la división # OPERADORES DE COMPARACIÓN (devuelven bool) 5 > 3 # → True 5 < 3 # → False 5 >= 5 # → True 5 <= 4 # → False 5 == 5 # → True (igual — DOBLE ==) 5 != 3 # → True (distinto) # OJO: = asigna, == compara x = 5 # asignación x == 5 # comparación → True # OPERADORES LÓGICOS True and True # → True (ambos deben ser True) True or False # → True (al menos uno True) not True # → False (invierte) # ASIGNACIÓN COMPUESTA x += 5 # x = x + 5 x -= 3 # x = x - 3 x *= 2 # x = x * 2 x /= 4 # x = x / 4 x //= 2 # x = x // 2 x %= 3 # x = x % 3 x **= 2 # x = x ** 2 # PRECEDENCIA (de mayor a menor) # 1. ( ) paréntesis # 2. ** potencia # 3. * / // % # 4. + - # 5. > < >= <= == != # 6. not # 7. and # 8. or # USOS CLÁSICOS DEL MÓDULO % n % 2 == 0 # par o impar n % x == 0 # divisible por x n % 10 # último dígito (n // 10) % 10 # penúltimo dígito n // 1000 # primer dígito de número de 4 cifras # CONVERSIÓN DE TIEMPO CON // Y % horas = segundos // 3600 minutos = (segundos % 3600) // 60 segs = segundos % 60
Python operators exercises — 5 solved with solutions and cheat sheet
Python operators exercises with real context are the best way to cement what you learned in theory and practice. Five exercises across three levels: basic, intermediate and final challenge, with special focus on % and //.
The method: try it → use the hint if stuck → compare with the solution.
Basic Level
Exercise 1 — Gym invoice
A gym charges 29.99€/month. Members with more than 12 months get 10% off. Ask for months as a member and calculate this month’s fee, total paid, and total savings.
💡 Hint: Use * for discount and total. Use // and % to split months into two periods.
Exercise 2 — Time converter
Ask for a number of seconds and convert to hours, minutes and seconds. Example: 3723 seconds = 1h 2m 3s.
💡 Hint: Hours = seconds // 3600. Minutes = (seconds % 3600) // 60. Seconds = seconds % 60.
Intermediate Level
Exercise 3 — Grade analyser
Ask for a grade 0-100. Calculate grade out of 10, percentage, pass/fail (≥50), points to next level (notable ≥70, outstanding ≥90), and points above pass mark.
💡 Hint: Grade out of 10 = grade / 10. Compare with 70 and 90 using > and -.
Exercise 4 — Digit extractor
Ask for a 4-digit integer and extract each digit using only // and %. No strings, no conversion — pure maths. Also check if the sum of digits is divisible by 3.
💡 Hint: Units = n % 10. Tens = (n // 10) % 10. Hundreds = (n // 100) % 10. Thousands = n // 1000.
Final Challenge
Exercise 5 — Cash register
Simulate a basic cash register. Ask for purchase amount and money given. Calculate change and break it down into bills and coins (50€, 20€, 10€, 5€, 2€, 1€, 0.50€, 0.20€, 0.10€, 0.05€, 0.02€, 0.01€).
💡 Hints:
- Convert change to cents with
int(round(change * 100))to avoid float errors - For each denomination:
quantity = cents // denomination, thencents = cents % denomination - Denominations in cents: 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1
- Only show denominations where quantity > 0
(Solutions same as Spanish version above)
Cheat sheet — Python operators
# ============================================ # CHEAT SHEET — Python Operators # Sergio Learns · sergiolearns.com # ============================================ # ARITHMETIC 5 + 3 # → 8 5 / 2 # → 2.5 always float 5 // 2 # → 2 integer division 5 % 2 # → 1 remainder (NOT percentage) 5 ** 2 # → 25 power # COMPARISON (return bool) 5 == 5 # → True double == for comparison 5 != 3 # → True x = 5 # assignment (single =) x == 5 # comparison (double ==) # LOGICAL True and True # → True True or False # → True not True # → False # COMPOUND ASSIGNMENT x += 5 # x = x + 5 x -= 3 # x = x - 3 x *= 2 # x = x * 2 # PRECEDENCE (high to low) # ( ) ** * / // % + - comparisons not and or # CLASSIC % USES n % 2 == 0 # even check n % x == 0 # divisible by x n % 10 # last digit (n // 10) % 10 # second to last digit # TIME CONVERSION hours = seconds // 3600 minutes = (seconds % 3600) // 60 secs = seconds % 60