ipythonblocks : présentation
ipythonblocks est un outil pédagogique qui propose de créer des grilles de cases colorées. Il permet d'expérimenter les concepts de contrôle de flux Python et de voir immédiatement les effets du code représentés de manière colorée et attrayante.
0. Généralités
- ipythonbocks sur PyPI
Pour retrouver la dernière version, les conseils d'installation : https://pypi.org/project/ipythonblocks/
- Le site ipythonblocks.org
Le site ipythonblocks.org propose de publier ses images et de consulter des exemples de grilles.
1. Grille : classe BlockGrid
ipythonblocks fournit une classe BlockGrid dont la représentation est une grille.
Pour créer (instancier) une grille, on appelle la méthode BlockGrid(width, height)
où :
width
est un entier : nombre de blocs par ligneheight
est un entier : nombre de blocs par colonne
Des paramètres optionnels peuvent être précisés :
fill
est un triplet d'entiers, représentant les niveaux de (rouge, vert, bleu) entre 0 et 255. Sa valeur par défaut est (0, 0, 0), ce qui définit des blocs de couleur noire.block_size
est un entier, représentant la longueur des côtés des blocs de la grille en pixels. Sa valeur par défaut est 20, et sa valeur minimale est 1.lines_on
est un booléen, précisant si les lignes ente les blocs doivent être affichés ou non. Sa valeur par défaut est True.
from ipythonblocks import BlockGrid
Exemple 1
grille_A = BlockGrid(12, 4)
grille_A
Exemple 2
grille_B = BlockGrid(5, 6, fill=(230, 92, 92))
grille_B
Exemple 3
grille_C = BlockGrid(30, 10, block_size=8, fill=(52, 52, 150))
grille_C
2. Cellule : classe Block
Les cellules de la grille sont représentées par des objets de la classe Block .
On accède à une cellule de la grille en précisant ses coordonnées dans la grille entre crochets.
La première coordonnée est l'indice de ligne, la seconde l'indice de colonne. Les indices débutent à 0.
cellule = grille_C[0, 29] # cellule en haut à droite
cellule
Chaque cellule est dotée d'attributs grâce auxquels on peut lire et modifier les propriétés de cette cellule :
red
,green
etblue
: entier indiquant le niveau de chaque couleurrgb
: triplet d'entiers indiquant les niveaux de (rouge, vert, bleu)size
: entier indiquant la dimension de la cellule
La position de la cellule dans la grille est donnée par des attributs qu'on ne peut pas modifier :
row
: indice de ligne de la cellulecol
: indice de colonne de la cellule
La méthode set_colors
permet de modifier les niveaux de (rouge, vert, bleu).
Au survol de la souris, les coordonnées et la couleur de la cellule sont affichées.
cellule.red = 240
cellule
grille_C
couleurs = ['rouge', 'vert', 'bleu']
valeurs = cellule.rgb
for couleur, valeur in zip(couleurs, valeurs):
print(couleur, valeur)
rouge 240
vert 52
bleu 150
Exemples
grille_D = BlockGrid(10, 10)
for cellule in grille_D:
if (cellule.row + cellule.col) % 2 == 0:
cellule.set_colors(255, 255, 255)
grille_D
grille_E = BlockGrid(10, 10)
for cellule in grille_E:
if (cellule.row * cellule.col) % 2 == 0:
cellule.set_colors(225, 225, 225)
grille_E
grille_F = BlockGrid(10, 10)
for cellule in grille_F:
if (cellule.row == 7 or cellule.col == 3):
cellule.set_colors(235, 235, 235)
grille_F
grille_G = BlockGrid(10, 10)
for cellule in grille_G:
if (cellule.row > 7 or cellule.col <= 3):
cellule.set_colors(205, 90, 90)
grille_G
grille_H = BlockGrid(10, 10)
for cellule in grille_H:
k = cellule.row + cellule.col
cellule.set_colors(20*k, 8*k, 10*k)
grille_H
3. Animation
Exemples
Méthode 1
import time
from IPython.display import clear_output
grille = BlockGrid(4, 3, block_size=30, fill=(52, 52, 100))
prec_cellule = None
for i in range(3):
for cellule in grille:
clear_output()
cellule.blue = 255
if prec_cellule is not None:
prec_cellule.blue = 100
grille.show()
time.sleep(0.3)
prec_cellule = cellule
Méthode 2
grille = BlockGrid(4, 3, block_size=30, fill=(52, 52, 100))
prec_cellule = None
for i in range(3):
for cellule in grille:
clear_output()
cellule.blue = 255
if prec_cellule is not None:
prec_cellule.blue = 100
grille.flash(display_time=0.5)
prec_cellule = cellule
grille.show()