''' Programa ejemplo para cargar una matriz editada en un archivo de texto cuyo nombre se solicita al usuario, en una lista de filas de números en punto
flotante.
En el archivo cada línea debe contener los elementos de una fila de la matriz separados por uno o más espacios.
El archivo de texto se puede editar con cualquier editor de texto de sistema operativo, como el notepad de Windows, en cuyo caso se puede guardar con
nombre matriz (el editor le agrega automáticamente la extensión .txt), y cuando se ingrese su nombre en el programa, debe incluirse la extensión .txt
(matriz.txt)

Ejemplo de contenido de matrix.txt:
 1    -3     2.4
-3.7   0.52  5
 2     4.6   0'''

def carga(nombreArchivo):
    ''' Carga la matriz en una lista desde el archivo cuyo nombre en el almacenamiento masivo representa el argumento nombreArchivo '''
    # Prólogo
    arch = open(nombreArchivo, 'r')
    ''' establece una conexión para lectura entre la variable arch y el archivo cuyo nombre representa nombreArch, que debe existir en la misma carpeta
    donde está el programa '''

    matriz = [] # establecimiento de estado inicial de la lista para la matriz como una lista vacia

    # Desarrollo
    for línea in arch: # línea toma los valores de cada línea del archivo desde la primera hasta la última, como cadenas de caracteres
        fila = [float(elem) for elem in línea.split()] # línea.split() convierte línea en una lista de cadenas (elem) delimitadas por espacios
        # y se construye una lista con la conversión de cada cadena a punto flotante asignándosela a fila

        matriz.append(fila) # se agrega la lista fila al final de la lista matriz

    # Epílogo
    arch.close() # se cierra la conexión entre el archivo real que representa arch y esta variable
    return matriz # se devuelve matriz como resultado de la función

def muestra(matriz):
    ''' Muestra elegante de la matriz '''
    print() # salto de línea para separar la matriz de lo que se haya imprimido previamente
    for fila in matriz:
        for elemento in fila: print(f'{elemento:10.4f}', end=' ') 
        print() # salto de línea luego de imprimir una fila en la misma línea de pantalla
    print() # salto de línea para separar la matriz de lo que se vaya a imprimir posteriormente

# PROGRAMA
print('Carga de una matriz desde un archivo de texto\n')
print('El archivo debe contener una fila de la matriz por línea, y no debe contener líneas vacias al final.\n')
na = input('Ingrese el nombre del archivo de texto, incluyendo su extensión .txt: ')
mat = carga(na)
muestra(mat)
input('Pulse Enter/Intro para terminar el programa')
