Besoin d'aide pour un tableau

Résolu/Fermé
TARTAIRO Messages postés 1 Date d'inscription jeudi 1 décembre 2022 Statut Membre Dernière intervention 1 décembre 2022 - Modifié le 1 déc. 2022 à 10:37
mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 - 1 déc. 2022 à 10:12

Bonjour tout le monde,

Je débute en python je voudrais remplacer les 0 par des points.

board = []
n = int(input("Ecriver la taille du tableau"))


x = int(input("Ecriver la largeur du tableau"))
for i in range(n):
    line = [] 
    for j in range(x):
        0 = .
        line.append(0)
    board.append(line)
for l in board :
    print(l)

1 réponse

mamiemando Messages postés 33081 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 27 avril 2024 7 749
Modifié le 1 déc. 2022 à 10:21

Bonjour,

Si tu veux faire une liste de caractère ".", il suffit de directement les insérer dans ta liste :

def make_board(m: int, n: int, x = 0) -> list:
    board = list()
    for _ in range(m):
        l = [x] * n
        board.append(l)
    return board

board = make_board(5, 10, ".")
print(board)

Supposons maintenant que tu sois en train de coder un démineur et que tu veuilles afficher ton tableau d'entier, de sorte à ne remplacer que les zéros par des points. Alors le programme devient :

def board_to_str(board: list) -> str:
    return "\n".join(
        "".join(
            str(board[i][j]) if board[i][j] != 0 else '.'
            for j in range(len(board[i]))
        )
        for i in range(len(board))
    )

board = make_board(5, 10, 0)
board[2][3] = 1
print(board_to_str(board))

Résultat :

..........
..........
...1......
..........
..........

Remarque :

On ne peut pas écrire :

(m, n) = (5, 10)
board = [["."] * n] * m
board[2][3] = 1
print(board_to_str(board))

... car cela retourne :

...1......
...1......
...1......
...1......
...1......

En effet, on recopie m fois la référence à la même sous-liste de taille n pour constituer le plateau. Du coup, si tu modifies une ligne, tu les modifies toutes.

Bonne chance

1