Reto: Media de n valores
Calcular la media de n números.
Método 1
El primer
while
permite preguntar cuántos números desea el usuario utilizar para calcular la media. Si el número es menor que 2 se insiste con la pregunta.
El segundo
while
permite ir preguntando por los números que compondrán la media.
Se usa la función
calcular
a la que pasamos dos argumentos. Una lista denominada
numeros
y la variable
x
que indica cuántos elementos tiene la lista. La función calcula la media y la devuelve con
return
.
Finalmente un
print
nos muestra en pantalla el valor que devuelve la función
calcular
.
x=0
u=0
numeros=[]
while (x < 2):
x = int(input('¿Cuántos números quieres?'))
while (u < x):
z = int(input('Dame un número:'))
numeros.append(z)
u+=1
def calcular(numeros,x):
w= sum(numeros)
v=w/x
return(v)
print('Media = ', calcular(numeros,x))
Método 2
Este método es similar al anterior si bien hemos sustituido el segundo
while
por un
for
. Otra diferencia con el método anterior radica en que ahora no usamos una función que calcule le media. Lo que hacemos es imprimir directamente la media calculada dentro del
print
final.
Con el primer
input
usamos
int
y con el segundo usamos
float
. Esto nos permite capturar números decimales para hacer la media, pero cuando preguntamos por cuántos números quiere el usuario tenemos que usar
int
por ser un número entero.
x = 0
numeros=[]
while (x < 1):
x = int(input('¿Cuántos números quieres?'))
for i in range(x):
z = float(input('Dame un número:'))
numeros.append(z)
print('Media = ', sum(numeros)/x)
Método 3
Calculamos la media utilizando la función media que tiene dos argumentos. Hemos puesto los nombres de los argumentos diferentes a los que se utilizan para llamar a la función. La función se llama con la última línea usando los argumentos
numeros
y
x
. La función recoge esos argumentos con los nombres
lista
y
n
. Se sabe quién es quién, por el orden. El primer argumento que se llama es el primer argumento de la función y el segundo argumento que se llama es el segundo argumento de la función.
Otra peculiaridad radica en que la función no retorna nada. No existe
return
. Lo que hace la función es imprimir dentro de ella usando un
print
que nos da directamente la media.
x=0
numeros=[]
while (x < 1):
x = int(input('¿Cuántos números quieres?'))
for i in range(x):
z = float(input('Dame un número:'))
numeros.append(z)
def media(lista,n):
print('Media = ', sum(lista)/n)
media(numeros,x)
Método 4
En este caso la función si utiliza un
return
y por tanto el
print
se encuentra fuera de la función.
x=0
numeros=[]
while (x < 1):
x = int(input('¿Cuántos números quieres?'))
for i in range(x):
z = float(input('Dame un número:'))
numeros.append(z)
def media(lista,n):
return(sum(lista)/n)
print('Media = ', media(numeros,x))
Método 5
En los métodos anteriores hemos preguntado siempre sobre cuántos números desea el usuario utilizar para calcular la media. En este caso, lo que hacemos es ir introduciendo números y nos preguntará por el siguiente, hasta que introduzcamos el valor 'n'. En ese momento se detendrá la petición de más números y nos dará la media.
A la pregunta
'¿Quieres otro? s/n' podemos contestar pulsando Enter para que nos pida el siguiente valor.
numeros=[]
while True:
z = float(input('Dame un número:'))
numeros.append(z)
r=input('¿Quieres otro? s/n')
if r=='n':
break
print(numeros)
print('Media = ', sum(numeros)/len(numeros))
Método 6
El método anterior tenía el inconveniente de que teníamos que pulsar dos veces seguidas Enter, una para validar el número introducido y otra para indicar que deseábamos introducir otro. En este caso, vamos a simplificar este proceso, y por lo tanto lo que haremos es pedir continuamente números, sin hacer preguntas. El proceso se detendrá cuando el valor introducido no sea numérico, o bien pulsemos Enter.
numeros=[]
print('Para salir pulsa cualquier valor no numérico o Enter.')
while True:
z = input('Dame un número:')
if z.isnumeric():
numeros.append(int(z))
else:
break
print(numeros)
if len(numeros)!=0:
print('Media = ', sum(numeros)/len(numeros))
Método 7
El método anterior tenía el inconveniente de que no funcionaba si introducíamos un valor que siendo numérico tuviera decimales. Es este caso, resolvemos ese inconveniente creando una función que detecta si un valor es numérico de tipo entero (
int
) o de tipo decimal (
float
).
numeros=[]
print('Para salir pulsa cualquier valor no numérico o Enter.')
def is_number(s):
try:
float(s)
return True
except ValueError:
return False
while True:
z = input('Dame un número:')
if is_number(z):
numeros.append(float(z))
else:
break
print(numeros)
if len(numeros)!=0:
print('Media = ', sum(numeros)/len(numeros))