Pourriez-vous m'aider avec un conseil ou me rediriger vers un sujet connexe .. Je suis nouveau en python et en programmation et je suis un peu pile ici. Je dois obtenir la sortie suivante:

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

Mais à la place je reçois:

......
.OO...
OOOO..
OOOOO.
.OOOOO
OOOOO.
OOOO..
.OO...
...... 

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', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

for i in range(0, len(grid)):
  output = ""
  for j in range(0,len(grid[i])):
    output += str(grid[i][j])
  print(output)
1
nikkitikitavi 12 avril 2018 à 23:57

3 réponses

Meilleure réponse

Vous devez inverser l'indexation sur grid[j][i]. Cela vous oblige également à modifier vos plages pour aligner l'axe de la liste (car vos lignes sont désormais des colonnes):

for i in range(len(grid[0])):
    output = ""
    for j in range(len(grid)):
        output += str(grid[j][i])
    print(output)

Les sorties:

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

Vous n'aviez pas non plus besoin de 0 pour le début de la plage car 0 est la valeur par défaut, ainsi que l'indentation devrait être 4 espaces, j'ai donc corrigé cela aussi :)


Cela pourrait également être fait dans une seule ligne:

Soit:

print('\n'.join(''.join(grid[j][i] for j in range(len(grid))) for i in range(len(grid[0]))))

Ou:

[print(''.join(grid[j][i] for j in range(len(grid)))) for i in range(len(grid[0]))]
2
Joe Iddon 12 avril 2018 à 21:07

Vous pouvez utiliser zip pour parcourir votre grille dans l'ordre des colonnes pour l'impression:

for row in zip(*grid) : print("".join(row))

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

Notez que cela suppose que la ligne 0 dans votre grille d'origine représente la colonne 0 dans la version transposée. Si vous souhaitez une rotation de 90 degrés, vous devrez inverser l'ordre des éléments de ligne en utilisant la ligne [:: - 1]

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', '.', '.', '.'],
        ['.', '.', '.', '.', '.', '.']]

for row in zip(*grid) : print("".join(row[::-1]))

..OO.OO.*
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
1
Alain T. 13 avril 2018 à 02:48

Si vous êtes autorisé à utiliser une bibliothèque tierce, cela peut être fait avec numpy.rotate et en définissant k=-1 [c'est-à-dire 90% dans le sens horaire]:

import numpy as np

print(np.array(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' '.' '.' '.']
 ['.' '.' '.' '.' '.' '.']]

for x in np.rot90(np.array(grid), k=-1):
    print(''.join(x))

..OO.OO..
.OOOOOOO.
.OOOOOOO.
..OOOOO..
...OOO...
....O....
-1
jpp 13 avril 2018 à 02:54