On appelle tableaux à deux dimensions les tableaux dont chaque élément est aussi un tableau. On obtient alors un tableau de tableaux.
Ce type de valeur permet de présenter notamment de représenter des matrices, des tableaux ou des grilles de jeu.
Voici en Python comment utiliser les tableaux à 2 dimensions :
>>> tab2 = [ [1,2,3,] , [4, 5, 6] ]
>>> tab2[0]
[1, 2, 3]
>>> tab2[0][0]
1
Dans cet exercice, on considère le tableau à deux dimensions suivants :
l1 = [ [2, 9, 3, 4, 6],
[5, 9, 4, 3, 2],
[7, 11, 3, 0, -4 ]
]
Question 1 - Écrire les instructions python permettant d'effectuer les actions suivantes :
3
[2, 9, 3, 4, 6]
5
2, 9, 3, 4, 6
5, 9, 4, 3, 2
7, 11, 3, 0, -4
Pour parcourir une matrice, il faut utiliser deux boucles for
imbriquées l'une dans l'autre :
l = [ [1, 2, 3],
[4, 5, 6]
]
for i in range(2) :
for j in range(3) :
print(l[i][j])
Question 1 - Écrire une fonction parcours_valeur_ligne
. Cette fonction prend en paramètre un tableau à deux dimensions et permet de parcourir ce tableau à l'aide d'un parcours par valeur. Cette fonction produira un affichage ligne par ligne.
>>> l1 = [ [1, 2, 3], [4, 5, 6] ]
>>> parcours_valeur_ligne(l1)
123
456
Question 2 - Écrire une fonction parcours_indice_ligne
. Cette fonction prend en paramètre un tableau à deux dimensions et permet de parcourir ce tableau à l'aide d'un parcours par indice. Cette fonction produira un affichage ligne par ligne.
>>> l1 = [ [1, 2, 3], [4, 5, 6] ]
>>> parcours_indice_ligne(l1)
123
456
Question 3 - Écrire une fonction parcours_colonne
. Cette fonction prend en paramètre un tableau à deux dimensions et permet de parcourir ce tableau. Cette fonction produira un affichage colonne par colonne.
>>> l1 = [ [1, 2, 3], [4, 5, 6] ]
>>> parcours_colonne(l1)
14
25
36
Très souvent, on va travailler sur un tableau à deux dimensions dont on connait au préalable ses dimensions, et sur laquelle on va modifier les valeurs au fur et à mesure.
Cela peut être le cas pour représenter la grille d'un jeu, comme le jeu du morpion, le puissance 4 ou pour représenter la grille d'un jeu.
Question 1 Écrire une fonction generer_grille
. Cette fonction prend en paramètre 2 nombres entiers précisant la largeur et la hauteur de la grille. Elle retourne un tableau à deux dimensions où chaque valeur est égale à 1, 2, 3...`.
>>> generer_grille(3, 2)
[[1, 2, 3], [4, 5, 6]]
Question 2 - Écrire une fonction afficher_grille
. Cette fonction prend un tableau à deux dimensions en paramètre et l'affiche sous la forme d'une grille.
>>> g = generer_grille(2, 4)
>>> afficher_grille(g)
|1|2|
|3|4|
|5|6|
|7|8|
Question 3 - Écrire une fonction element
. Cette fonction prend en paramètre un tableau à deux dimensions et deux entiers x
et y
. La fonction retourne la valeur situé à la position [x, y]
dans la grille.
>>> g = generer_grille(2, 4)
>>> afficher_grille(g)
|1|2|
|3|4|
|5|6|
|7|8|
>>> element(g, 1, 0)
2
Un carré magique d'ordre est une matrice carrée (tableau à deux dimensions) telle que la somme des nombres sur chaque ligne, sur chaque colonne et sur chaque diagonale soient égales.
Question 1 - Vérifier que la matrice suivante est un bien un carré magique.
Pour la suite des questions, on souhaite construire un programme permettant de savoir si une matrice est bien un carré magique. On peut représenter la matrice ci-dessus par un tableau à deux dimensions.
matrice = [ [4, 9, 2], [3, 5, 7], [8, 1, 6] ]
Question 2 - Écrire une fonction est_carre
qui prend en paramètre une matrice. Cette fonction indique si la matrice est bien carrée : son nombre de lignes doit être égal à son nombre de colonnes. Elle retourne True
si oui, False
sinon.
def est_carre(matrice) -> bool :
return
Question 3 - Écrire une fonction somme_ligne
qui prend en paramètre une matrice et un numéro de ligne. Cette fonction retourne la somme des entiers de la ligne passée en paramètre.
def somme_ligne(matrice, l) -> int :
return
Question 4 - Écrire une fonction somme_colonne
qui prend en paramètre une matrice et un numéro de colonne. Cette fonction retourne la somme des entiers de la colonne passée en paramètre.
def somme_colonne(matrice, c) -> int :
return
Question 5 - Écrire une fonction somme_diag_A
qui prend en paramètre une matrice. Cette fonction retourne la somme des entiers d'une diagonale (coin haut droit vers coin bas gauche).
def somme_diag_A(matrice) -> int :
return
Question 6 - Écrire une fonction somme_diag_B
qui prend en paramètre une matrice. Cette fonction retourne la somme des entiers d'une diagonale (coin haut gauche vers coin bas droit).
def somme_diag_B(matrice) -> int :
return
Question 7 - Écrire une fonction est_magique
qui prend en paramètre une matrice. Cette fonction retourne un booléen indiquant si la matrice est magique ou non.
def est_magique(m) -> bool:
return
L'objectif de cet exercice de générer une grille permettant de jouer au démineur.
Question 1 - Écrire une fonction generer_plateau_jeu
. Cette fonction prend en paramètre deux nombres entiers représentant la hauteur et longueur du plateau de jeu ainsi qu'un flottant précisant le taux de mines présent sur la grille. Cette fonction retourne une liste de listes représentant le plateau de jeu.
Remarques :
random
pour décider si une case contient une bombe ou non.def generer_plateau_jeu(hauteur, largeur, proba) -> list:
'''
>>> generer_plateau_jeu(5, 3, 0)
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
'''
return
Question 2 - Écrire une fonction afficher_plateau
. Cette fonction prend en paramètre une grille de jeu sous forme de liste et affiche la grille comme l'exemple ci-dessous :
>>> r = generer_plateau_jeu(5, 3, 0)
>>> print(r)
[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> afficher_plateau(r)
000
000
000
000
000
Question 3 - Pour simplifier la récupération d'éléments dans cette liste de listes, vous pouvez récupérer la fonction element
de la question 3 exercice 3.
Dans le jeu du démineur, les cases qui ne contiennent pas une bombe doivent indiquer le nombre de bombes présentes dans les cases voisines.
Une case est considérée voisine d'une autre si elle présente un côté ou un sommet commun. Ainsi, une case possède au maximum 8 voisines.
Question 3 - Écrire une fonction cases_voisines
. Cette fonction prend en paramètre le plateau de jeu sous forme de liste et deux nombres entiers représentant la position d'une case en [x; y]
. Cette fonction retourne la liste de toutes les cases voisines autour de cette case. Une case sera représentée sous la forme d'un tuple (x, y)
.
Remarque :
def cases_voisines(liste, x, y) -> list:
return
Question 4 - Écrire une fonction nombre_bombe
. Cette fonction prend en paramètre le plateau de jeu sous forme de liste et deux nombres entiers représentant la position d'une case en [x; y]
. Cette fonction renvoie le nombre de bombes présentes autour de la case.
cases_voisines
.def nombre_bombe(liste, x, y) -> int:
return
La dernière étape consiste à parcourir la grille générée et de placer dans les cases vides le nombre de bombes présentes dans les cases voisines.
Question 5 - Écrire une fonction placer_indications
qui prend en paramètre le plateau de jeu sous forme de liste. Cette fonction met à jour le plateau en plaçant dans chaque case vide le nombre de bombes présentes dans les cases voisines.
def placer_indications(liste) -> None :
return