Você está na página 1de 2

def abre_arquivo(arquivo_txt):

arquivo = open(arquivo_txt, "r") #My_matrix.txt


matriz = []
while True:
linha = arquivo.readline()
if linha == "": # Lê linha, se a string obtida é vazia o loop para ler
todas as linhas acaba
break
linha = linha.rstrip()
if len(linha) == 1: # Pula linha 1
continue
lista_linha = linha.split(" ") # Guarda todos os números de cada linha em
uma lista
lista_int = []
for item in lista_linha:
num = int(item)
lista_int[len(lista_int):] = [num] # Transforma os números de string
para int e os coloca na matriz
matriz[len(matriz):] = [lista_int]
return matriz

def imprime_matriz(matriz):
ordem = len(matriz)
new_matriz = []
for i in range(ordem): # Transforma todos os números da matriz em string para
que seja possível imprimir linha por linha da mesma
linha = []
for j in range(ordem):
linha.append(str(matriz[i][j]))
new_matriz.append(linha)

for line in new_matriz:


print(" ".join(line))

def verifica_matriz(matriz):
ordem = len(matriz)
soma_teste = sum(matriz[0]) # Todas as somas de linhas, colunas e diagonais
devem ser iguais a soma_teste, soma da linha 1
for i in range(ordem):
if sum(matriz[i]) != soma_teste: # Compara-se a soma_teste com todas as
somas de linhas
return False

for j in range(ordem):
conta = 0
for i in range(ordem):
conta += matriz[i][j]
if conta != soma_teste: # Compara-se a soma_teste com todas as somas de
colunas
return False

conta = 0
for i in range(ordem):
conta += matriz[i][i] # Compara-se a soma_teste com a soma da diagonal
principal
if conta != soma_teste:
return False

conta = 0
for i, j in zip(range(ordem), range(ordem - 1, -1, -1)): # Compara-se a
soma_teste com a diagonal secundária
conta += matriz[i][j]
if conta != soma_teste:
return False

return True # Retorna True caso não haja nenhuma soma diferente de soma_teste

matriz = abre_arquivo("My_matrix.txt")
imprime_matriz(matriz)
if verifica_matriz(matriz):
print("O quadrado é mágico.")
else:
print("O quadrado não é mágico")

Você também pode gostar