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 matrices_compatibles(M1, M2):
return len(M1[0]) == len(M2)
def produit_matrices(M1, M2):
assert matrices_compatibles(M1, M2), "Les deux matrices ne peuvent pas être multipliées entre elles."
m = len(M1)
p = len(M2[0])
produit = [[0 for j in range(p)] for i in range(m)]
for i in range(m):
for j in range(p):
somme = 0
for n in range(len(M1[0])):
somme += M1[i][n]*M2[n][j]
produit[i][j] = somme
return produit
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
from PIL import Image
from images import *
import codecs
def asciiArt(nomimage,tabcar,fichier):
tabimage=get_pixels(nomimage)
fichiertexte=codecs.open(fichier,"w",'utf-8')
for y in range(len(tabimage)):
for x in range(len(tabimage[0])):
fichiertexte.write(tabcar[int(tabimage[y][x][0]*10/255)]+' ')
fichiertexte.write('\n')
fichiertexte.close()
car=['@','#','S','?','%','+',':','*',';','.',' ']
asciiArt('chat.png',car,'chat.txt')
import csv
def commune_plus_habitants(mat):
maxi = 0
nom_maxi = " "
for ligne in mat:
if ligne[2] > maxi:
maxi = ligne[2]
nom_maxi = ligne[1]
return maxi, nom_maxi
def commune_moins_habitants(mat):
mini = mat[0][2]
nom_mini = " "
for ligne in mat:
if ligne[2] < mini:
mini = ligne[2]
nom_mini = ligne[1]
return mini, nom_mini
def moyenne_population(mat):
somme = 0
for ligne in mat:
somme += ligne[2]
return somme / len(mat)
print(commune_plus_habitants(liste))
print(commune_moins_habitants(liste))
print(moyenne_population(liste))