mat1 = [[0 for j in range(10)] for i in range(5)]
from random import randint
mat2 = [[randint(1, 9) for j in range(7)] for i in range(7)]
Il fallait bien voir que le chiffre unique que l'on plaçait à chaque ligne était le numéro de la ligne :
mat3 = [[i for j in range(10)] for i in range(7)]
Ici, c'est le numéro de colonne que l'on affiche sur chacune des lignes :
mat4 = [[j for j in range(10)] for i in range(7)]
Moins évident...il fallait avoir l'idée que l'on place 0 sur les lignes paires ( indices 0, 2, 4, ...) et 1 sur les lignes impaires ( indices 1, 3, ...); c'est donc la valeur du reste de la divisions du numéro de ligne par 2 que l'on place sur chacune des lignes :
mat5 = [[i%2 for j in range(7)] for i in range(6)]
Et encore moins évident...il fallait trouver que le nombre affiché est une combinaison de i et j :
mat6 = [[4*i + j for j in range(4)] for i in range(4)]
import copy
def viser_coins(mat: list[list])->list[list]:
"""Matrice de 6 lignes et 5 colonnes"""
mat[0][0] = 'x'
mat[0][4] = 'x'
mat[5][0] = 'x'
mat[5][5] = 'x'
def viser_les_coins(mat: list[list])->list[list]:
"""Matrice de taille quelconque"""
nb_l = len(mat) #<--- nombre de lignes
nb_c = len(mat[0]) #<--- nombre de colonnes
mat[0][0] = 'x'
mat[0][nb_c-1] = 'x'
mat[nb_l-1][0] = 'x'
mat[nb_l-1][nb_c-1] = 'x'
def viser_les_coins_copie(mat: list[list])->list[list]:
"""Copie de matrice de taille quelconque"""
copie = copy.deepcopy(mat)
nb_l = len(copie)
nb_c = len(copie[0])
copie[0][0] = 'x'
copie[0][nb_c-1] = 'x'
copie[nb_l-1][0] = 'x'
copie[nb_l-1][nb_c-1] = 'x'
return copie
def noir(hauteur: int, largeur: int)->list:
m = [[0 for j in range(largeur)] for i in range(hauteur)] # largeur = colonnes / hauteur = lignes
return m
def grise(hauteur: int, largeur: int, niveau: int)->list:
if niveau > 255 or niveau < 0 : # tests si le niveau de gris est hors limites
niveau = 255 # dans ce cas, on crée une image blanche !
m = [[niveau for j in range(largeur)] for i in range(hauteur)]
return m
from random import randint
def aleatoire(hauteur: int, largeur: int)->list:
m = [[randint(0, 255) for j in range(largeur)] for i in range(hauteur)]
return m
Pour les lignes verticales, il faut donc mettre un pixel à 0 ( = noir ) tous les 20 pixels ( on veut 10 lignes ), et 255 ( = blanc ) pour tous les autres.
On va donc tester quand l'indice de parcours de ligne j est un multiple de 20 ( reste de la division de j par 20 égal à 0 : j%20 == 0 ) : dans ce cas, on met un pixel noir ( 0 ), sinon on met un pixel blanc :
def lignes_verticales()->list:
m = [[255 if j%20 != 0 else 0 for j in range(200)] for i in range(200)]
return m
Et par analogie, pour les lignes horizontales, le calcul doit se faire bien entendu sur l'indice de ligne :
def lignes_horizontales()->list:
m = [[255 if i%20 != 0 else 0 for j in range(200)] for i in range(200)]
return m
Il faut donc trouver une formule de calcul qui fasse varier le niveau de gris selon l'indice de la colonne :
Il suffit donc de donner au niveau la valeur de l'indice de la colonne :
def degrade_horizontal()->list:
m = [[j for j in range(256)] for i in range(256)]
return m
Et bien entendu, pour un dégradé vertical :
def degrade_vertical()->list:
m = [[i for j in range(256)] for i in range(256)]
return m
from random import randint
def couleur_aleatoire(largeur: int, hauteur: int)->list:
m = [[(randint(0,255),randint(0,255),randint(0,255)) for i in range(largeur)] for j in range(hauteur)]
return m
Il faut faire varier les valeurs de R, V et B dans le tuple en fonction de l'indice de colonne ou de ligne; par exemple :
def degrade_colore_horizontal()->list:
m = [[(j, 155, j) for j in range(256)] for i in range(256)]
return m
def degrade_colore_ vertical()->list:
m = [[(100, i, i) for j in range(256)] for i in range(256)]
return m
Mais plein d'autres possibilités sont possibles !!
Plus dur ! Il faut utiliser la même astuce que pour les lignes verticales et horizontales.
Par exemple, pour le drapeau français, en lui donnant une largeur de 256 pixels:
On en déduit que :
def drapeau_français()->list:
b = (0,0,255) # bleu
w = (255,255,255) # blanc
r = (255,0,0) # rouge
m = [[b if j<85 else w if j>85 and j<171 else r for j in range(256)] for i in range(200)]
return m
Et pour le drapeau italien :
def drapeau_français()->list:
b = (0,255,0) # vert
w = (255,255,255) # blanc
r = (255,0,0) # rouge
m = [[b if j<85 else w if j>85 and j<171 else r for j in range(256)] for i in range(200)]
return m