12. Manejo de Matrices

A continuación se presenta la consigna y la solución desarrollada por los alumnos en clase. Para cada función se presentaron códigos de lo más variado. No existió un criterio para definir el código de quién se subía al aula. En parte, sirve para ver la variedad de formas de pensar que existen.

"""
CONSIGNA:
Dada una matriz cuadrada, se requieren determinadas funciones para conformar un
programa más complejo.
Las funciones requeridas son las siguientes:
    
    media: Recibe como argumento la matriz bajo análisis. Devuelve el promedio
    de todos los valores de la matriz.
    
    buscaPositivo: Recibe como argumento la matriz bajo análisis. Si existe un
    número positivo devuelve True, caso contrario, False. Además, admite el 
    parámetro reverse=True, con el cual, realiza lo propio pero con valores
    negativos.
    
    buscaMayor: Recibe como argumento la matriz bajo análisis. Devuelve el
    mayor número de la matriz. Además, admite el parámetro reverse=True,
    con el cual, realiza lo propio pero con el menor valor.
    
    mayoresQue: Recibe como argumento la matriz bajo análisis y un valor.  
    Devuelve la cantidad de elementos que son mayores que el valor recibido
    como parámetro. Además, admite el parámetro reverse=True, con el cual, 
    realiza lo propio pero con los elementos menores al valor recibido.
    
    --DESAFIO--
    moda: Recibe como argumento la matriz bajo análisis. Retorna el valor que
    más se repite. Si hay más de un valor con la misma cantidad de
    repeticiones, se retorna cualquiera de ellos.
    
El programa presentará un informe, a raíz de analizar una matriz dada, con cada 
una de las opciones ofrecidas por las funciones. Ej:
    - La media de los valores de la Matriz es: ...
    - Existen ... valores Mayores que la media
    - Existen ... valores Menores que la media
    - La Matriz tiene valores Positivos
    - La Matriz No tiene valores Negativos
    - El Mayor valor encontrado es: ...
    - El Menor valor encontrado es: ...
"""
## FUNCIONES ##
def mostrar(matriz):
    # Recibe matriz y muestra por filas. No devuelve nada
    for fila in matriz:
        print(fila)
def media(matriz):
    acumulador = 0
    for x in matriz:
        for i in x:
            acumulador += i
    media = acumulador / (len(matriz) * len(matriz))
    return(media)
def buscaPositivo(matriz,reverse=False):
    positivos = 0
    negativos = 0
    for i in matriz:
        for j in i:
            if j > 0:
                positivos +=1                
            if j < 0:
                negativos +=1                
                
    if reverse == False and positivos != 0:
        return True
    if reverse == False and positivos == 0:
        return False
    if reverse == True and negativos != 0:
        return True
    if reverse == True and negativos == 0:
        return False
def buscaMayor(matriz, reverse=False):
    if reverse==False:
        maximos=[]
        for i in matriz:
            maximos.append(max(i))        
        maximo=max(maximos)
        return maximo
    else:
        minimos=[]
        for i in matriz:
            minimos.append(min(i))
        for j in minimos:
            minimo=min(minimos)
        return minimo
def mayoresQue(m,valor,reverse=False):
    c = 0
    for i in m:
        for j in i:
            if reverse==False:
                if j>valor:
                    c+=1
            if reverse==True:
                if j<valor:
                    c+=1
    return c    
## PROGRAMA PRINCIPAL ##
# Definición de la "matriz cuadrada" para la prueba de las funciones
matriz = [[1,2,3,4],
          [5,6,7,8],
          [9,2,3,4],
          [6,7,8,2]]
# matriz = [[-1,1,1,1],
#           [2,-2,2,2],
#           [3,3,-3,3],
#           [4,-4,4,4]]
# matriz = [[-1,-2,-3],
#           [-5,-6,-7],
#           [-9,-2,-8]]
print("-----------------INFORME:--------------")
print("La matriz es:")
mostrar(matriz)
print("La media de los valores de la matriz es: {}" .format(media(matriz)))
print("Existen {} valores Mayores que la media" .format(mayoresQue(matriz, media(matriz), reverse = False)))
print("Existen {} valores Menores que la media" .format(mayoresQue(matriz, media(matriz), reverse = True)))
if buscaPositivo(matriz, reverse = False):
    print("La Matriz tiene valores Positivos")
else:
    print("La Matriz no tiene Valores Positivos")
if buscaPositivo(matriz, reverse = True):
    print("La Matriz tiene valores Negativos")
else:
    print("La Matriz no tiene Valores Negativos")
print("El Mayor valor encontrado es: {}" .format(buscaMayor(matriz, reverse = False)))
print("El Menor valor encontrado es: {}" .format(buscaMayor(matriz, reverse = True)))