Aller au contenu

Formes pleines et formes creuses⚓︎

🎨 Un rectangle 3×5 plein, motif: #
    #####
    #####
    #####
🎨 Un triangle creux 5×5, motif: Y
    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 et ligne_creuse sont des fonctions qui renvoient une ligne que l'on peut afficher avec print
  • rectangle et triangle en version creux ou plein sont des fonctions qui renvoient un dessin (une liste de lignes) que l'on peut afficher avec dessine.

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
🐍 Console Python
>>> print(ligne_pleine('M', 1))
M
>>> print(ligne_pleine('#', 5))
#####
>>> print(ligne_creuse('X', 5))
X   X
>>> print(ligne_creuse('M', 1))
M
🐍 Console Python
>>> 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
🐍 Console Python
>>> 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
###
# testsbksl-nlbksl-nlassert lignepy-undpleine("M", 1) == "M"bksl-nlassert lignepy-undpleine("#", 5) == "#####"bksl-nlbksl-nlassert lignepy-undcreuse("Y", 1) == "Y"bksl-nlassert lignepy-undcreuse("X", 5) == "X X"bksl-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# autres testsbksl-nlbksl-nlassert lignepy-undpleine("P", 7) == "PPPPPPP"bksl-nlbksl-nlassert lignepy-undcreuse("P", 7) == "P P"bksl-nlbksl-nlassert rectanglepy-undplein("1", 3, 1) == [bksl-nl "1",bksl-nl "1",bksl-nl "1",bksl-nl]bksl-nlbksl-nlassert rectanglepy-undplein("8", 3, 8) == [bksl-nl "88888888",bksl-nl "88888888",bksl-nl "88888888",bksl-nl]bksl-nlbksl-nlassert rectanglepy-undcreux("C", 1, 7) == ["CCCCCCC"]bksl-nlassert rectanglepy-undcreux("C", 3, 1) == [bksl-nl "C",bksl-nl "C",bksl-nl "C",bksl-nl]bksl-nlassert rectanglepy-undcreux("C", 4, 6) == [bksl-nl "CCCCCC",bksl-nl "C C",bksl-nl "C C",bksl-nl "CCCCCC",bksl-nl]bksl-nlbksl-nl 5/5

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-nlbksl-nldef lignepy-undpleine(motif, nbpy-undcolonnes):bksl-nl return ...bksl-nlbksl-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-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-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-nlbksl-nldef trianglepy-undplein(motif, nbpy-undlignes):bksl-nl ...bksl-nlbksl-nlbksl-nldef trianglepy-undcreux(motif, nbpy-undlignes):bksl-nl ...bksl-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-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-nlbksl-nldef lignepy-undpleine(motif, nbpy-undcolonnes):bksl-nl return motif py-str nbpy-undcolonnesbksl-nlbksl-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-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-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-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-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-nl

A

Z