Un parcours par valeur des lignes de la matrice suffit :
for ligne in m:
print(ligne)
Là aussi, un parcours par valeur élément par élément est possible : chaque élément d'une même ligne est affiché à la suite du précédent; à la fin d'une ligne, on fait un retour à la ligne :
for ligne in m:
for element in ligne:
print(element, end = ' ')
print() # retour à la ligne à la fin d'une ligne
On peut aussi faire un parcours par indice, mais c'est plus compliqué :
for i in range(len(m)): # boucle de parcours de chaque ligne
for j in range(len(m[0])): # boucle de parcours des éléments d'une ligne
print(m[i][j], end = ' ')
print()
Ici, un parcours par valeur ne peut pas convenir pour parcourir colonne par colonne, ça ne marche pas comme ça !
Il est donc nécessaire de faire un parcours par indice, avec la boucle "extérieure" qui parcourt les colonnes, et la boucle "intérieure" qui parcourt les éléments de cette colonne, donc ligne par ligne :
for j in range(len(m[0])): # boucle de parcours des colonnes
for i in range(len(m)): # boucle de parcours des éléments de chaque colonne ( donc ligne par ligne )
print(m[i][j], end = ' ')
print() # retour à la ligne à la fin d'une colonne
Ici, on veut modifier les éléments de la matrice, donc pas le choix, il faut un parcours par indice :
def inverser_0_et_1(mat: list):
for i in range(len(m)):
for j in range(len(m[0])):
if m[i][j] == 0:
m[i][j] = 1
elif m[i][j] == 1:
m[i][j] = 0
m = [[0,1,1,0],[1,0,1,0],[0,0,0,1]]
print(m) # affiche [[0,1,1,0],[1,0,1,0],[0,0,0,1]]
inverser_0_et_1(m)
print(m) # affiche [[1,0,0,1],[0,1,0,1],[1,1,1,0]]
print()
pour afficher le résultat renvoyé par la fonction, puisqu'elle n'en renvoie pas !
def maximum_matrice(m: list)->int:
maxi = m[0][0] # premier élément de la matrice
for ligne in m:
for element in ligne:
if element > maxi:
maxi = element
return maxi
def minimum_matrice(m: list)->int:
mini = m[0][0]
for ligne in m:
for element in ligne:
if element < mini:
mini = element
return mini
def inverse(m: list)->list:
copie = copy.deepcopy(m)
for i in range(len(copie)):
for j in range(len(copie[0])):
copie[i][j] = 255 - copie[i][j]
return copie
def solarisation(m: list, seuil: int)->list:
copie = copy.deepcopy(m)
for i in range(len(copie)):
for j in range(len(copie[0])):
if copie[i][j] < seuil :
copie[i][j] = 0
else :
copie[i][j] = 255
return copie
L'idée est de parcourir la première moitié des lignes de la matrice, et d'échanger l'élément [i][j]
de ces lignes avec l'élément [len(m)-i][j]
:
def pivot_180(m: list)->list:
copie = copy.deepcopy(m)
for i in range(len(copie)//2): # parcours de la moitié seulement des lignes !
for j in range(len(copie[0])):
copie[i][j], copie[len(m)-i][j] = copie[len(m)-i][j], copie[i][j] # méthode Python pour échanger la valeur de deux variables
return copie
def noir_et_blanc(m: list)->list:
copie = copy.deepcopy(m)
for i in range(len(copie)):
for j in range(len(copie[0])):
moyenne = ( copie[i][j][0] + copie[i][j][1] + copie[i][j][2] ) // 3 # copie[i][j] est un tuple !
copie[i][j] = moyenne # on remplace donc le tuple par une unique valeur entière
return copie