Matrices 2ª Prueba Evaluación Continua. Curso 2018-2019 Parcial. Prof MRD
Funciones, listas, matrices
Enunciado
Rellenar una lista con M posiciones. M debe de tener un valor entre 1-15. Los valores de la lista se le piden al usuario y deben estar en el rango -100 y 100.
Localizar a todos los elementos que no estén repetidos en la lista, contarlos y almacenarlos (se muestran en el principal).
Crear una matriz N * M. N puede tener cualquier valor y M tiene que coincidir con el apartado 1. Rellenar la matriz copiando los elementos de la lista un número N de veces.
Pedir al usuario un número correspondiente a una fila valida de la matriz, sumar todos los elementos de la fila y promediarlos. Regresar los valores en una tupla.
Todo el programa debería resolverse utilizando las funciones y dejando en el principal solo las llamadas a las mismas, pedir datos y/o mostrar datos. Funciones sugeridas:
Función que compruebe valores en rango apartado 1.
Función que rellene lista apartado 1.
Función que identifique los elementos no repetidos de la lista y los cuente, apartado 2.
Función que rellene la matriz utilizando como base la lista anterior, apartado 1.
Función que sume los elementos de la fila, calcule el promedio y retorne ambos elementos en una tupla, apartado 4.
Análisis:
Crear una función que permita validar los datos. def validar(mensaje,minimo,maximo):
Código
#PARCIAL 2
#Funcion que permite comprobar que un número pedido cumple con un rango
def Validar(mensaje,minimo,maximo):
correcto=False
while correcto!=True:
try:
valor=int(input(mensaje))
if valor>=minimo and valor<=maximo:
return valor
else:
print("Número fuera de rangos")
except:
print("Has tecleado un valor no númerico")
def Crear_Lista(posiciones):
valores=[]
for i in range(posiciones):#Recorremos todas las posiciones para que el usuario introduzca valores
valor=Validar("Introduzca el número del valor que quiera introducir en la posición {i+1}(Entre -100 y 100): ",-100,100)
valores.append(valor)
return valores
def No_repetidos(valores):
noreptidos=set(valores)
return noreptidos
def NoRepetidos(valores):
lista_no_repetidos=[]
conjuntos=set(lista)
cunatos_hay=len(conjuntos)
for i in lista:
veces=lista.count(i)
if veces==1:
lista_no_repetidos.append(i)
return lista_no_repetidos
def Tupla(matriz,fila):
filavalida=matriz[fila-1]
sumatorio=0
tupla=[]
for i in filavalida:
sumatorio+=i
tupla.append(sumatorio)
promedio=round(sumatorio/len(matriz[0]),2)
print(promedio)
tupla.append(promedio)
tupla=tuple(tupla)
return tupla
def crear_matriz(filas):
matriz=[]
for i in range(filas):
matriz.append(lista)
return matriz
#Opción 1 pedir los valores
M=Validar("Dime cuantas elementos vas a tener ==>", 1,15)
#Opción 2 crear la lista
lista=Crear_Lista(M)
#Visualizar la lista
print(lista)
#Si se interpreta que no debe aparecer el repetido
lista_norepetidos= NoRepetidos(lista)
print(lista_norepetidos)
print("Los datos no repetidos son: ",lista_norepetidos,"y son", len(lista_norepetidos))
#Si se interpreta que puede estar repetido
conjunto_datosnorepetidos=No_repetidos(lista)
print("los datos no repetidos son: ",conjunto_datosnorepetidos ,"y son", len(conjunto_datosnorepetidos))
#Pedir número de fila
N=Validar("Dime cuantas filas vas a tener==>", 1,15)
#Crear la matriz
matriz=crear_matriz(N)
print(matriz)
#Obtener pedir la fila, obtener la suma y visualizarla
fila=Validar("Introduzca una fila en la cual quiera realzar una suma y un promedio: ",1,N)
tupla=Tupla(matriz,N)
print("La suma de la fila {} es: {} el promedio de la fila es: {}".format(N,tupla[0],tupla[1]))
Código utilizando Numpy
#PARCIAL 2
#Funcion que permite comprobar que un número pedido cumple con un rango
from numpy import*
def Validar(mensaje,minimo,maximo):
correcto=False
while correcto!=True:
try:
valor=int(input(mensaje))
if valor>=minimo and valor<=maximo:
return valor
else:
print("Número fuera de rangos")
except:
print("Has tecleado un valor no númerico")
def Crear_Lista(posiciones):
valores=[]
for i in range(posiciones):#Recorremos todas las posiciones para que el usuario introduzca valores
valor=Validar("Introduzca el número del valor que quiera introducir en la posición {i+1}(Entre -100 y 100): ",-100,100)
valores.append(valor)
return valores
def No_repetidos(valores):
noreptidos=set(valores)
return noreptidos
def NoRepetidos(valores):
lista_no_repetidos=([])
conjuntos=set(lista)
cunatos_hay=len(conjuntos)
for i in lista:
veces=lista.count(i)
if veces==1:
lista_no_repetidos.append(i)
return lista_no_repetidos
def Tupla(matriz,fila):
filavalida=matriz[fila-1]
sumatorio=0
tupla=[]
for i in filavalida:
sumatorio+=i
tupla.append(sumatorio)
promedio=round(sumatorio/len(matriz),2)
print(promedio)
tupla.append(promedio)
tupla=tuple(tupla)
# Otra manera
suma = matriz.sum(axis = 1)
suma_final=suma[fila-1]
promedio = suma_final/suma.shape[0]
tupla=[]
tupla.append(suma_final)
tupla.append(promedio)
Tupla=tuple(tupla)
print(suma)
print(promedio)
return Tupla
def crear_matriz(m,filas):
matriz = zeros((m,filas))
for i in range(matriz.shape[0]):
matriz[i] = lista
return matriz
#Opción 1 pedir los valores
M=Validar("Dime cuantas elementos vas a tener ==>", 1,15)
#Opción 2 crear la lista
lista=Crear_Lista(M)
#Visualizar la lista
print(lista)
#Si se interpreta que no dbe aparecer el repetido
lista_norepetidos= NoRepetidos(lista)
print(lista_norepetidos)
print("Los datos no repetidos son: ",lista_norepetidos,"y son", len(lista_norepetidos))
#Si se interpreta que puede estar repetido
conjunto_datosnorepetidos=No_repetidos(lista)
print("los datos no repetidos son: ",conjunto_datosnorepetidos ,"y son", len(conjunto_datosnorepetidos))
#Pedir número de fila
N=Validar("Dime cuantas filas vas a tener==>", 1,15)
#Crear la matriz
matriz=crear_matriz(N,M)
print(matriz)
#Obtener pedir la fila, obtener la suma y visualizarla
fila=Validar("Introduzca una fila en la cual quiera realzar una suma y un promedio: ",1,N)
tupla=Tupla(matriz,N)
print("La suma de la fila {} es: {} el promedio de la fila es: {}".format(N,tupla[0],tupla[1]))