# =============================================================================
# CALCULAR LA MEDIA DE UNA SERIE DE NÚMEROS
# =============================================================================
# Este programa pide números al usuario uno a uno y los va sumando.
# Cuando el usuario introduce un 0, el programa para y calcula la media.
#
# La media es la suma de todos los números dividida entre cuántos hay.
# Ejemplo: si introduces 4, 8 y 6 → media = (4+8+6) / 3 = 6.0
#
# Interacción esperada:
# Digite un numero: 4
# Digite un numero: 8
# Digite un numero: 6
# Digite un numero: 0 ← el 0 para el bucle, no se suma
# 6.0
# =============================================================================
def calcular_media():
# Definimos la función. No recibe parámetros porque los datos
# los pedirá ella misma al usuario con input().
# Devolverá un número decimal (float) con la media calculada.
numero = float(input("Digite un numero: "))
# Pedimos el PRIMER número antes del bucle.
# Necesitamos hacerlo aquí para poder comprobar la condición del while.
# float() convierte el texto que escribe el usuario a número decimal.
# Usamos float en lugar de int para aceptar números como 3.5 o 7.8.
# PRUEBA: cambia float() por int() e intenta introducir 3.5 para ver el error.
suma = 0
# Variable acumuladora: irá sumando todos los números que introduzca el usuario.
# Siempre se inicializa a 0 antes del bucle.
# Ejemplo paso a paso con 4, 8, 6:
# Antes del bucle: suma = 0
# Tras el 4: suma = 4
# Tras el 8: suma = 12
# Tras el 6: suma = 18
contador = 0
# Variable contadora: cuenta cuántos números ha introducido el usuario.
# También se inicializa a 0. La necesitamos para dividir al calcular la media.
# Ejemplo: con 4, 8 y 6 → contador llegará a 3.
# ¡IMPORTANTE! El 0 final NO se cuenta porque para el bucle antes de sumarlo.
while numero != 0:
# El bucle se repite MIENTRAS el número introducido sea distinto de 0.
# En cuanto el usuario escribe 0, el bucle termina sin sumar ni contar ese 0.
# "!=" significa "distinto de".
# ALTERNATIVA equivalente: while not numero == 0:
# ↓ Aquí estaba el comentario "????" en el código original.
# Lo que hace este bloque es acumular el número en la suma
# y aumentar el contador en 1 por cada número válido introducido.
suma = suma + numero
# Añadimos el número actual a la suma acumulada.
# Es lo mismo que escribir: suma += numero
# Solo llegamos aquí si numero != 0, así que el 0 nunca se suma.
contador = contador + 1
# Contamos este número como válido.
# Es lo mismo que escribir: contador += 1
numero = float(input("Digite un numero: "))
# Pedimos el SIGUIENTE número al final del bucle.
# Esto sobreescribe el valor anterior de "numero".
# En la próxima comprobación del while se usará este nuevo valor.
# Si el usuario escribe 0 aquí, el while parará en su próxima vuelta.
# Cuando llegamos aquí, el bucle ya ha terminado.
# En este punto sabemos que:
# - "suma" tiene la suma de todos los números introducidos (sin el 0)
# - "contador" tiene cuántos números se introdujeron (sin el 0)
return suma / contador
# Calculamos y devolvemos la media: suma total dividida entre cuántos números hay.
# CUIDADO: si el usuario introduce 0 como primer número, contador valdrá 0
# y dividir entre 0 causará un error (ZeroDivisionError).
# MEJORA para evitar ese error:
# if contador == 0:
# return 0
# return suma / contador
# =============================================================================
# PROGRAMA PRINCIPAL
# =============================================================================
media = calcular_media()
# Llamamos a la función. Esta ejecuta todo el proceso de pedir números
# y calcular la media. El resultado que devuelve "return" se guarda aquí.
print(media)
# Mostramos la media por pantalla.
# MEJORA para que quede más claro:
# print(f"La media de los números introducidos es: {media:.2f}")
# El :.2f muestra solo 2 decimales. Ejemplo: 6.333333 → 6.33