#!/usr/bin/python3 -B from pnm import * ## Question 1.1 from pnm import * voir_fichier('space-invader-pieuvre.pbm',quadrillage=False) voir_fichier('space-invader-soucoupe.pbm',quadrillage=False) ## Question 1.2 ## Question 1.3 M = fichier_vers_matrice('space-invader-pieuvre.pbm') print(M) ## Question 1.4 M = fichier_vers_matrice('space-invader-pieuvre.pbm') M[3][4] = True matrice_vers_fichier(M, 'space-invader-pieuvre2.pbm') voir_fichier('space-invader-pieuvre2.pbm') def dimensions(M): return (len(M),len(M[0])) def affiche_matrice_booleens(M, plein, vide): (n,m)=dimensions(M) for i in range(n): for j in range(m): if M[i][j]: print(plein, sep='', end='') else: print(vide, sep='', end='') print() def affiche_matrice_booleens2(M, plein, vide): dico = { True:plein, False:vide } (n,m)=dimensions(M) for i in range(n): for j in range(m): print(dico[ M[i][j] ],end='') print() affiche_matrice_booleens(M,'#','.') affiche_matrice_booleens2(M,'#','.') ## Question 3.1 def matrice_false(n,m): # Il existe une autre version plus longue dans le cours : matrice_nulle # Au lieu de remplir la matrice de 0, nous allons la remplir de False return [ [False] * (m) for i in range(n)] def ajoute_horizontal(M1 , M2): """Construit une nouvelle matrice constituée des colonnes de M1 et à droite de celles de M2 (erreur si M1 et M2 n'ont pas le même nombre de lignes). """ (n1, m1) = dimensions(M1) (n2, m2) = dimensions(M2) assert n1 == n2 n=n1 M = matrice_false(n,m1+m2) for i in range(n): for j in range(m1): M[i][j] = M1[i][j] for j in range(m2) : M[i][j+m1] = M2[i][j] return M M = fichier_vers_matrice('space-invader-pieuvre.pbm') M2 = ajoute_horizontal(M , M) M3 = ajoute_horizontal(M2 , M) matrice_vers_fichier(M3 , 'space-invader-3-pieuvres.pbm') voir_fichier('space-invader-3-pieuvres.pbm') def ajoute_horizontal(M1 , M2): assert(len(M1) == len(M2)) return [ M1[i] + M2[i] for i in range(len(M1)) ] ## Question 3.2 def répète_horizontal(M, n): matrice = M for i in range(1,n): matrice = ajoute_horizontal(matrice,M) return matrice M20 = répète_horizontal(M, 20) matrice_vers_fichier(M20 , 'space-invader-20-pieuvres.pbm') voir_fichier('space-invader-20-pieuvres.pbm') ## Question 3.3 def ajoute_vertical(M1,M2): (n1,m1) = dimensions(M1) (n2,m2) = dimensions(M2) n = n1+n2 m = max(m1,m2) # On crée une matrice de la bonne taille M=matrice_false(n,m) # On complète le haut de la matrice M avec M1 for i in range(n1): for j in range(m1): # m1