''' Carga de dos matrices de un archivo de texto.
Las matrices deben estar representadas una fila por línea del archivo y separadas entre sí por una línea en blanco, por ejemplo:

matrices.txt
-------------
1 2 3
6 5 4
7 8 9

1 4 6
7 2 5
9 8 3
------------- '''

def cargaMúltiple(nomArch):
    ''' Carga dos matrices de un archivo de texto y las devuelve como listas de filas de números en punto flotante '''
    # Prólogo
    arch = open(nomArch, 'r') # abre archivo con nombre en nomArch para leer desde la primer línea
    m1, m2 = [], [] # Inicialización de las dos matrices como lisrtas vacías

    # Desarrollo
    # Carga de primera matriz
    línea = arch.readline() # lee primera línea del archivo
    while línea != '\n': # la última línea leida no debe estar vacia, es decir, no debe contener sólo el fin de línea
        fila = [float(elem) for elem in línea.split()] # convierte la línea en una fila de la matriz (lista de números en punto flotante)
        m1.append(fila) # agrega fila a m1
        línea = arch.readline() # lee siguiente línea del archivo

    # Carga de segunda matriz
    línea = arch.readline() # lee primera línea de la segunda matriz, ya que la previa es la vacía
    while línea != '\n' and línea !='': # la última línea leida no debe estar vacia, es decir, no debe contener sólo el fin de línea, ni ser nula (fin de archivo)
        fila = [float(elem) for elem in línea.split()] # convierte la línea en una fila de la matriz (lista de números en punto flotante)
        m2.append(fila) # agrega fila a m2
        línea = arch.readline() # lee siguiente línea del archivo

    # Epílogo
    arch.close() # cierre del archivo
    return m1, m2 # devolución de las matrices

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 dos matrices desde un archivo de texto\n')
print('El archivo debe contener una fila de cada matriz por línea, y una fila vacía para separarlas.\n')
na = input('Ingrese el nombre del archivo de texto, incluyendo su extensión .txt: ')
mat1, mat2 = cargaMúltiple(na)
muestra(mat1)
muestra(mat2)
input('Pulse Enter/Intro para terminar el programa')




