Écrivez un programme qui affiche une ligne de « X », un rectangle de « # », et un triangle de « @ ». Les deux formes doivent être creuses (remplies avec des espaces).
L'entrée comporte quatre entiers, un par ligne :
Vous devez afficher les trois formes successivement, avec une ligne blanche entre chaque forme, comme le montre l'exemple.
Votre objectif doit être d'obtenir le code source le plus simple et clair possible, en le décomposant en fonctions.
entrée :
15 5 12 6
sortie :
XXXXXXXXXXXXXXX ############ # # # # # # ############ @ @@ @ @ @ @ @ @ @@@@@@
On fabrique ici des fonctions qui renvoient du texte à afficher, et non des fonctions qui affichent directement le texte. C'est une meilleure pratique. On peut vouloir faire autre chose de ce texte plutôt que de l'afficher...
On utilise les possibilités de concaténation et multiplication avec les chaînes de caractères.
def ligne_pleine(motif: str, longueur: int) -> str: """Renvoie une chaîne avec un motif répété. >>> ligne("X", 15) XXXXXXXXXXXXXXX """ return motif * longueur + "\n" def ligne_creuse(motif: str, longueur: int) -> str: """Renvoie une chaîne avec un motif encadrant de l'espace. >>> ligne("X", 15) X X """ return motif + " "* (longueur-2) + motif + "\n" def rectangle(motif: str, hauteur: int, largeur: int) -> str: """Renvoie un rectangle creux entouré de motif. >>> rectangle("#", 5, 12) ############ # # # # # # ############ """ dessin = ligne_pleine(motif, largeur) # première ligne if hauteur > 1: if largeur > 1: dessin += ligne_creuse(motif, largeur) * (hauteur - 2) else: dessin += (motif + "\n") * (hauteur - 2) dessin += ligne_pleine(motif, largeur) # dernière ligne return dessin def triangle(motif: str, côté: int) -> str: """Renvoie un triangle creux entouré de motif. >>> triangle("@", 6) @ @@ @ @ @ @ @ @ @@@@@@ """ dessin = ligne_pleine(motif, 1) # première ligne if côté > 1: for i in range(2, côté): dessin += ligne_creuse(motif, i) dessin += ligne_pleine(motif, côté) # dernière ligne return dessin longueur = int(input()) print(ligne_pleine("X", longueur)) hauteur = int(input()) largeur = int(input()) print(rectangle("#", hauteur, largeur)) côté = int(input()) print(triangle("@", côté))```