Formes pleines et formes creuses⚓︎
#####
#####
#####
Y
YY
Y Y
Y Y
YYYYY
Dans cet exercice, on travaille avec des listes de chaines de caractères pour représenter des dessins.
- Chaque ligne d'un dessin sera une chaine de caractères non vide.
- Un dessin sera une liste non vide de lignes.
Lignes et dessins, dans cet exercice
ligne_pleine
etligne_creuse
sont des fonctions qui renvoient une ligne que l'on peut afficher avecprint
rectangle
ettriangle
en versioncreux
ouplein
sont des fonctions qui renvoient un dessin (une liste de lignes) que l'on peut afficher avecdessine
.
Compléter le code suivant afin de disposer des fonctions indiquées. On utilisera les fonctions simples dans les fonctions élaborées. Vous n'avez qu'à compléter les fonctions ligne
, rectangle
et triangle
dans chacune des deux versions. Le paramètre motif
sera une chaine de caractères de longueur 1.
Décommenter bloc par bloc les assertions
Le premier bloc d'assertions est actif. Il permet de tester la fonction ligne_pleine
.
Quand vous avez réussi, vous pouvez décommenter le bloc suivant d'assertions.
Pour cela, il suffit de déplacer la ligne """
sous le bloc.
Exemples
>>> print(ligne_pleine('M', 1))
M
>>> print(ligne_pleine('#', 5))
#####
>>> print(ligne_creuse('X', 5))
X X
>>> print(ligne_creuse('M', 1))
M
>>> dessine(rectangle_plein('A', 3, 5))
AAAAA
AAAAA
AAAAA
>>> dessine(rectangle_creux('O', 3, 5))
OOOOO
O O
OOOOO
>>> dessine(rectangle_creux('O', 1, 5))
OOOOO
>>> dessine(triangle_plein('T', 5))
T
TT
TTT
TTTT
TTTTT
>>> dessine(triangle_creux('F', 5))
F
FF
F F
F F
FFFFF
>>> dessine(triangle_creux('K', 1))
K
def dessine(lignes):bksl-nl """Affiche les rectangles et les trianglesbksl-nl N'affiche pas les lignes ! Pour une ligne : utiliser printbksl-nl """bksl-nl for ligne in lignes:bksl-nl print(ligne)bksl-nlbksl-nldef lignepy-undpleine(motif, nbpy-undcolonnes):bksl-nl return ...bksl-nlbksl-nldef lignepy-undcreuse(motif, nbpy-undcolonnes):bksl-nl if nbpy-undcolonnes == 1:bksl-nl return ...bksl-nl else:bksl-nl return motif + " " py-str (nbpy-undcolonnes - 2) + ...bksl-nlbksl-nldef rectanglepy-undplein(motif, nbpy-undlignes, nbpy-undcolonnes):bksl-nl resultat = []bksl-nl for i in range(...):bksl-nl resultat.append(...)bksl-nl return resultatbksl-nlbksl-nldef rectanglepy-undcreux(motif, nbpy-undlignes, nbpy-undcolonnes):bksl-nl if nbpy-undlignes == 1:bksl-nl return [lignepy-undpleine(...)]bksl-nl else:bksl-nl resultat = [...]bksl-nl for i in range(...):bksl-nl resultat.append(...)bksl-nl resultat.append(...)bksl-nl return resultatbksl-nlbksl-nldef trianglepy-undplein(motif, nbpy-undlignes):bksl-nl ...bksl-nlbksl-nldef trianglepy-undcreux(motif, nbpy-undlignes):bksl-nl ...bksl-nlbksl-nl# testsbksl-nlbksl-nlassert lignepy-undpleine('M', 1) == "M"bksl-nlassert lignepy-undpleine('#', 5) == "#####"bksl-nlbksl-nl# Conseil : décommenter bloc par bloc les assertionsbksl-nl"""bksl-nlassert lignepy-undcreuse('Y', 1) == "Y"bksl-nlassert lignepy-undcreuse('X', 5) == "X X"bksl-nlbksl-nlbksl-nlassert rectanglepy-undplein('B', 1, 5) == ["BBBBB"]bksl-nlassert rectanglepy-undplein('A', 3, 5) == [bksl-nl "AAAAA",bksl-nl "AAAAA",bksl-nl "AAAAA",bksl-nl]bksl-nlbksl-nlassert rectanglepy-undcreux('P', 1, 5) == ["PPPPP"]bksl-nlassert rectanglepy-undcreux('O', 3, 5) == [bksl-nl "OOOOO",bksl-nl "O O",bksl-nl "OOOOO",bksl-nl]bksl-nlbksl-nlassert trianglepy-undplein('S', 1) == ["S"]bksl-nlassert trianglepy-undplein('T', 5) == [bksl-nl "T",bksl-nl "TT",bksl-nl "TTT",bksl-nl "TTTT",bksl-nl "TTTTT",bksl-nl]bksl-nlbksl-nlassert trianglepy-undcreux('G', 1) == ["G"]bksl-nlassert trianglepy-undcreux('F', 5) == [bksl-nl "F",bksl-nl "FF",bksl-nl "F F",bksl-nl "F F",bksl-nl "FFFFF",bksl-nl]bksl-nlbksl-nl"""bksl-nlbksl-nldef dessine(lignes):bksl-nl """Affiche les rectangles et les trianglesbksl-nl N'affiche pas les lignes ! Pour une ligne : utiliser printbksl-nl """bksl-nl for ligne in lignes:bksl-nl print(ligne)bksl-nlbksl-nldef lignepy-undpleine(motif, nbpy-undcolonnes):bksl-nl return motif py-str nbpy-undcolonnesbksl-nlbksl-nldef lignepy-undcreuse(motif, nbpy-undcolonnes):bksl-nl if nbpy-undcolonnes == 1:bksl-nl return motifbksl-nl else:bksl-nl return motif + " " py-str (nbpy-undcolonnes - 2) + motifbksl-nlbksl-nldef rectanglepy-undplein(motif, nbpy-undlignes, nbpy-undcolonnes):bksl-nl resultat = []bksl-nl for i in range(nbpy-undlignes):bksl-nl resultat.append(lignepy-undpleine(motif, nbpy-undcolonnes))bksl-nl return resultatbksl-nlbksl-nldef rectanglepy-undcreux(motif, nbpy-undlignes, nbpy-undcolonnes):bksl-nl if nbpy-undlignes == 1:bksl-nl return [lignepy-undpleine(motif, nbpy-undcolonnes)]bksl-nl else:bksl-nl resultat = [lignepy-undpleine(motif, nbpy-undcolonnes)]bksl-nl for i in range(nbpy-undlignes - 2):bksl-nl resultat.append(lignepy-undcreuse(motif, nbpy-undcolonnes))bksl-nl resultat.append(lignepy-undpleine(motif, nbpy-undcolonnes))bksl-nl return resultatbksl-nlbksl-nldef trianglepy-undplein(motif, nbpy-undlignes):bksl-nl resultat = []bksl-nl for i in range(nbpy-undlignes):bksl-nl resultat.append(lignepy-undpleine(motif, i + 1))bksl-nl return resultatbksl-nlbksl-nldef trianglepy-undcreux(motif, nbpy-undlignes):bksl-nl if nbpy-undlignes == 1:bksl-nl return [motif]bksl-nl else:bksl-nl resultat = [motif]bksl-nl for i in range(nbpy-undlignes - 2):bksl-nl resultat.append(lignepy-undcreuse(motif, i + 2))bksl-nl resultat.append(lignepy-undpleine(motif, nbpy-undlignes))bksl-nl return resultatbksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nlassert lignepy-undpleine('M', 1) == "M"bksl-nlassert lignepy-undpleine('#', 5) == "#####"bksl-nlbksl-nl# Conseil : décommenter bloc par bloc les assertionsbksl-nl"""bksl-nlassert lignepy-undcreuse('Y', 1) == "Y"bksl-nlassert lignepy-undcreuse('X', 5) == "X X"bksl-nlbksl-nlbksl-nlassert rectanglepy-undplein('B', 1, 5) == ["BBBBB"]bksl-nlassert rectanglepy-undplein('A', 3, 5) == [bksl-nl "AAAAA",bksl-nl "AAAAA",bksl-nl "AAAAA",bksl-nl]bksl-nlbksl-nlassert rectanglepy-undcreux('P', 1, 5) == ["PPPPP"]bksl-nlassert rectanglepy-undcreux('O', 3, 5) == [bksl-nl "OOOOO",bksl-nl "O O",bksl-nl "OOOOO",bksl-nl]bksl-nlbksl-nlassert trianglepy-undplein('S', 1) == ["S"]bksl-nlassert trianglepy-undplein('T', 5) == [bksl-nl "T",bksl-nl "TT",bksl-nl "TTT",bksl-nl "TTTT",bksl-nl "TTTTT",bksl-nl]bksl-nlbksl-nlassert trianglepy-undcreux('G', 1) == ["G"]bksl-nlassert trianglepy-undcreux('F', 5) == [bksl-nl "F",bksl-nl "FF",bksl-nl "F F",bksl-nl "F F",bksl-nl "FFFFF",bksl-nl]bksl-nlbksl-nl"""bksl-nlbksl-nl
A
Z