2
respostas

Podem me ajudar com um exercício de Python ?

Estou fazendo um exercício do livro Automatize tarefas maçantes com Python, no capitulo sobre listas, o exercício possui a seguinte proposta :

Grade para imagem composta de caracteres Suponha que você tenha uma lista de listas em que cada valor das listas internas seja uma string de um caractere como:

grid = [['.', '.', '.', '.', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['O', 'O', 'O', 'O', 'O', '.'],
['.', 'O', 'O', 'O', 'O', 'O'],
['O', 'O', 'O', 'O', 'O', '.'],
['O', 'O', 'O', 'O', '.', '.'],
['.', 'O', 'O', '.', '.', '.'],
['.', '.', '.', '.', '.', '.']]

Podemos pensar em grid[x][y] como sendo o caractere nas coordenadas x e y de uma “imagem” desenhada com caracteres textuais. A origem (0, 0) estará no canto superior esquerdo, as coordenadas x aumentam para a direita e as coordenadas y aumentam para baixo. Copie o valor da grade anterior e crie um código que a utilize para exibir a imagem:

..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....

Dica: você deverá usar um loop em um loop para exibir grid[0][0], em seguida grid[1][0], grid[2][0] e assim por diante, até grid[8][0]. Com isso, a primeira linha estará concluída, portanto exiba uma quebra de linha. Em seguida, seu programa deverá exibir grid[0][1], depois grid[1][1], grid[2][1] e assim por diante. O último item que seu programa exibirá é grid[8][5]. Além disso, lembre-se de passar o argumento nomeado end para print() se não quiser que uma quebra de linha seja exibida automaticamente após cada chamada a print().

Até então chamar os código como cordenadas não foi uma tarefa difícil, o que não consigo entender é a plotagem do resultado na horizontal na mesma linha usando o loop. Sou iniciante de Python kkk desculpem se for uma pergunta 'idiota'.

CÓDIGO FEITO ATÉ AGORA :

grid= [['.','.','.','.','.','.'],
       ['.','O','O','.','.','.'],
       ['O','O','O','O','.','.'],
       ['O','O','O','O','O','.'],
       ['.','O','O','O','O','0'],
       ['O','O','O','O','O','.'],
       ['O','O','O','O','O','.'],
       ['.','O','O','.','.','.'],
       ['.','.','.','.','.','.']]
for i in range(0,8):
    print(grid[i][0])
2 respostas

Consegui !!! Pensei mais e esquentei a cabeça mas sozinho deu certo !!!! Fiquei um dia todo para resolver kkk mas o importante é o resultado final. Bom não consigo excluir o post portanto segue a resposta pra quem quer o desafio :

grid= [['.','.','.','.','.','.'],
       ['.','O','O','.','.','.'],
       ['O','O','O','O','.','.'],
       ['O','O','O','O','O','.'],
       ['.','O','O','O','O','0'],
       ['O','O','O','O','O','.'],
       ['O','O','O','O','.','.'],
       ['.','O','O','.','.','.'],
       ['.','.','.','.','.','.']]
def cod(x):
    for i in range(0,9):
        print(grid[i][x],end='')
        if i == 8:
            print('')
        else:
            continue
for i in range(0,6):
    cod(i)

Oii Lucas, como você está? Espero que esteja bem ^-^

Fico feliz que você tenha conseguido resolver. Mas vou te passar um hackezinho hahahaha

A forma como o desafio foi proposto, remete na matemática de matrizes o que chamamos de matriz transposta, ou seja, quando escrevemos as colunas da matriz, na mesma ordem, como uma linha. Veja o exemplo abaixo:

Exemplo de uma matriz transposta

Sendo, assim, poderiamos fazer o seguinte código para impressão:

for i in range(6):
    for j in range(9):
        print(grid[j][i], end='')
    print('\n')

Observe que ao printar a matriz, printamos grid na posição j i , o que faz com que seja impresso cada coluna ao invés de cada linha como é na forma convencional ao fazermos grid na posição i j. Veja abaixo um exemplo prático da primeira interação do for:

  • variável i = 0
  • variável j = 0
  • impressão da matriz na posição [0][0]
  • variável i = 0
  • variável j = 1
  • impressão da matriz na posição [1][0]
  • variável i = 0
  • variável j = 2
  • impressão da matriz na posição [2][0]
  • variável i = 0
  • variável j = 3
  • impressão da matriz na posição [3][0]

e assim por diante...

Uma maneira mais prática de fazer esse código com apenas UMA linha é utilizando a biblioteca Numpy, que por padrão possui uma função para fazer a transposta da matriz. Veja como é simples:

Exemplo com a biblioteca Numpy

E para printar essa matriz, podemos percorré-la com o seguinte código:

Percorrendo a matriz Numpy

Observação: Na linha que temos print(*resultado[i]), o asterisco foi colocado para desempacotar a lista, ou seja, tirarmos os elementos de dentro da lista para que sejam impressos em sua forma normal, sem estar dentro de uma lista com os colchetes que a representam.

Qualquer dúvida estou por aqui, tá bom?

Grande abraço!