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 A 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):
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
return m
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]]
print(inverser_0_et_1(m)) # affiche [[1,0,0,1],[0,1,0,1],[1,1,1,0]]
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 image_negatif(mat):
copie = copy.deepcopy(mat)
for i in range(len(copie)):
for j in range(len(copie[0])) :
pixel = copie[i][j]
R = 255 - pixel[0]
V = 255 - pixel[1]
B = 255 - pixel[1]
nv_pixel = (R, V, B)
copie[i][j] = nv_pixel
return copie
def image_seuil(mat, seuil):
copie = copy.deepcopy(mat)
for i in range(len(copie)):
for j in range(len(copie[0])) :
pixel = copie[i][j]
R = pixel[0]
if R > seuil:
R = 255
else:
R = 0
V = pixel[1]
if V > seuil:
V = 255
else:
V = 0
B = pixel[2]
if B > seuil:
B = 255
else:
B = 0
nv_pixel = (R, V, B)
copie[i][j] = nv_pixel
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):
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):
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