Suponhamos que nos pedem para escrever um programa que nos permita visualizar de modo natural uma matriz, mas não apenas os seus valores mas também a posição de cada elemento na matriz. Um exemplo seria: Vamos então à solução. Comecemos por tomar uma decisão simples e razoável: mostrar a matriz linha a linha:
def mostra_mat(matriz): num_linhas = len(matriz) for linha in range(num_linhas): # mostra linha pass(a instrução pass… não faz nada, mas permite que o programa esteja sintaticamente correcto!). Parece que não avançamos muito, mas também temos segurança sobre a correcção deste programa. Temos agora que tomar uma segunda decisão: como mostrar uma linha? E decidimos fazê-lo... coluna a coluna!
def mostra_mat(matriz): num_linhas = len(matriz) num_colunas = len(matriz[0]) for linha in range(num_linhas): # mostra linha for coluna in range(num_colunas): # mostra coluna passEstá na hora de concretizar. Vamos supor que a matriz está representada por um tuplo de tuplos, ou seja, cada elemento do duplo representa uma linha. Esquecendo o detalhe das posições vamos resolver o problema de mostrar apenas o conteúdo. Por cada linha, vamos imprimir os elementos de todas as colunas. Como queremos que tudo fique na mesma linha, usaremos a palavra chave end da instrução de print com a indicação de que os elementos devem estar separados por uma tabulação.
def mostra_mat(matriz): num_linhas = len(matriz) num_colunas = len(matriz[0]) for linha in range(num_linhas): # mostra linha for coluna in range(num_colunas): # mostra coluna print(matriz[linha][coluna],end='\t') print()Notar o uso do print() no fim da impressão da linha no final do segundo ciclo for, precisamente para forçar a mudança de linha. Já só falta resolver a questão dos índices da matriz. Mas agora isso é muito fácil, pois em cada momento, os nomes linha e coluna têm os valores de que precisamos:
def mostra_mat(matriz): num_linhas = len(matriz) num_colunas = len(matriz[0]) for linha in range(num_linhas): # mostra linha for coluna in range(num_colunas): # mostra coluna print('(',linha,',',coluna,'): ',matriz[linha][coluna],end='\t') print()Claro que se não gostarmos muito do aspecto podemos melhorar um pouco a saída, evitando o aparecimento de muitos espaços em branco:
def mostra_mat_2(matriz): num_linhas = len(matriz) num_colunas = len(matriz[0]) for linha in range(num_linhas): # mostra linha for coluna in range(num_colunas): # mostra coluna print('(%d,%d): %s' % (linha,coluna,matriz[linha][coluna]),end='\t') print()Moral da história: devagar se vai ao longe!