Lancer la version interactive sur :
Histoire de bugs¶
Objectif et durée¶
L’objectif de cette séquence est de corriger des erreurs ou mauvaises pratqiue communément vues en classe. Il est possible de réaliser cette séquence en une période.
Introduction¶
Je vous présente Bob, un jeune élève qui apprend l’informatique. Il manquait probablement un peu de sommeil car il a réussi à écrire une série un notebook truffé de bugs. Vous allez aider Bob à distance en corrigeant son code et en lui expliquant quel était son problème en dessous de la cellule bogguée. Attention, c’était une dure journée pour Bob et il pourra y avoir plusieurs bugs par cellule. Nous partirons de la cellule de code suivante qui n’est pas bogguée.
[2]:
import numpy as np # Pour manipuler des tableaux de nombres
import matplotlib.pyplot as plt # pour afficher des images
def creer_image(hauteur,largeur):
return np.zeros((hauteur,largeur))
## Création d’image
Bob veut créer une image et la modifier pour que le premier pixel soit blanc, voici ce qu’il a écrit:
[2]:
creer_image(8,12)
img[0,0] = 255
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-e346498b1b2b> in <module>
1 creer_image(8,12)
----> 2 img[0,0] = 255
NameError: name 'img' is not defined
## Définition de fonctions utiles Il souhaite maintenant définir deux fonctions. Une qui affiche la taille d’une image donnée en argument, et l’autre qui affiche l’image donnée en argument, avec ce code:
[3]:
def printSize(image):
print("Largeur x hauteur = "image.shape[1]" x "image.shape[0])
def montrer_image(image):
plt.imshow(img, cmap='gray',vmin = 0, vmax = 255)
return plt.show()
File "<ipython-input-3-f63f1ae0c3d0>", line 2
print("Largeur x hauteur = "image.shape[1]" x "image.shape[0])
^
SyntaxError: invalid syntax
Modification d’une ligne de l’image¶
Bob veut maintenant que la première ligne d’une image de 10x10 pixels soit blanche et le reste noir. Il écrit un code qui ne fait pas d’erreur mais qui ne fait pas ce qu’il veut. Voici son code:
[8]:
img = np.zeros((10, 10))
img[0,0:-1] = 255
Compter les pixels blancs¶
Bob écrit une fonction qui permet de compter les pixels ayant une valeur de 255 dans une image. Il écrit cette fonction qui marche mais son enseignant lui dit que ça n’est pas bon…
[10]:
def comptePixel255(image):
var1 = 0
for y in range(image.shape[0]):
for x in range(image.shape[1]):
niveau_gris = image[y,x]
if niveau_gris == 255:
var1 += 1
return var1
print(comptePixel255(img))
9
Retournement horizontal¶
Enfin Bob veut écrire une fonction qui fait un retournement horizontal d’une image donnée en argument de la fonction. Encore une fois, Bob ne voit pas de bug mais son enseignant n’est tout de même pas satisfait. Bob n’oublie pas que c’est pour son bien que son enseignant pinaille parfois :)
[7]:
def flip(img):
img_flip = np.zeros((10,10))
for y in range(10):
for x in range(10):
img_flip[y,x] = img[y,-x-1]
return img_flip
# création de l'image à retourner
img = np.zeros((10, 10))
img[2,2] = 255
img[2,7] = 255
img[6,2] = 255
img[6,6:8] = 255
img[7,3:6] = 255
plt.imshow(img, cmap='gray',vmin = 0, vmax = 255)
plt.show()
# flip
img_flip = flip(img)
[ ]: