Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Importação de um módulo criado pelo próprio programador!

Criei dois arquivos:

o primeiro é ConstroiMatriz.py que constroi uma matriz dados o número de linhas e o número de colunas. (está funcionando)

segundo: TrocaElementosMatriz.py que deveria chamar a função matriz do arquivo ConstroiMatriz.py para após receber a matriz, trocar dois elementos.

O problema: TrocaElementosMatriz.py não consegue acessar a função matriz e não enxerga a variável matrix.

ConstroiMatriz.py :

m = int(input("Digite o número de linhas da matriz: "))
n = int(input("Digite o número de colunas da matriz: "))    
def matriz(m,n):
    matrix = []


    for i in range(1,m+1):
        linha = []
        for j in range(1,n+1):

            x= int(input("Digite o valor ({},{}): ".format(i,j)))
            linha.append(x)

        global matrix    
        matrix.append(linha)

    return matrix




def main():
    pass



if __name__ == "__main__":
    main()



print(matriz(m,n))

TrocaElementosMatriz.py:

import ConstroiMatriz


def troca():

    pos1 = int(input("Digite a linha do elemento a ser trocado: "))
    pos2 = int(input("Digite a coluna do elemento a ser trocado: "))
    pos3 =int(input("Digite a linha do elemento a ser trocado: "))
    pos4 = int(input("Digite a coluna do elemento a ser trocado: "))



    matrix[pos1][pos2], matrix[pos3][pos4] = matrix[pos3][pos4],matrix[pos1][pos2]

    return matrix



print(matriz(1,1))    
print(troca())

Alguma ideia?

6 respostas

Edson, quando você faz um import absoluto de um método (como você fez com import ConstroeMatriz) todas as variáveis e funções definidas dentro desse método só serão acessíveis através de nome_do_modulo.nome_da_variavel. Assim, você pode mudar o final de seu código do TrocaElementosMatriz.py para:

matrix = ConstroiMatriz.matriz(1,1)
print(matrix)
print(troca())

Resolveu!

Só mais uma coisinhas:

Como fazer para quando eu importar o módulo, não sair executando tudo? Por exemplo:

No IDLE, quando dei import ConstroeMatriz,

saiu executando isso:

m = int(input("Digite o número de linhas da matriz: "))
n = int(input("Digite o número de colunas da matriz: "))

Eu lembro que resolvia usando o

if __name__ == "__main__":

Mas não faço ideia como!

Opa , Edson, boa pergunta (e boa resposta já haha!). Como você já adiantou, é com esse if __name__ == "__main__". Tudo o que estiver dentro desse condicional só será executado se você estiver de fato executando esse arquivo em específico, ou seja, não será executado se você apenas importar o módulo. Assim, é só você colocar essas linhas dentro do bloco desse if:

if __name__ == '__main__':
    m = int(input("Digite o número de linhas da matriz: "))
    n = int(input("Digite o número de colunas da matriz: ")) 
    print(matriz(m,n))

Surgiu outro problema:

print(matriz(m,n)) NameError: name 'm' is not defined

solução!

Você lembrou de mover a linha print(matriz(m,n)) para dentro do bloco condicional? Queremos tirar todo código solto desse arquivo, para não ser executado no import, lembra disso!

Só tinha faltado isso! Muito obrigado!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software