Losange creux ASCII
Objectif de cet exercice
Coder une fonction qui affiche du texte sous la forme, deux paramètres étant donnés.
###### ######
##### #####
#### ####
### ###
## ##
# #
## ##
### ###
#### ####
##### #####
###### ######
Exercice en deux parties
Vous pourrez résoudre les deux parties de manière totalement indépendante.
- La partie 1, concerne la fonction
affiche_ligne_creusequi prend deux entiersketpen paramètres et qui affiche une ligne dekcaractères'#', puispespaces, puiskcaractères'#'. - La partie 2, concerne la fonction
losange_creuxqui prend deux entiersketpen paramètres et qui affiche un motif géométrique qui fait penser à un losange creux dont la première ligne est composée dekcroisillons, puispespaces, puiskcroisillons.
>>> affiche_ligne_creuse(4, 3)
#### ####
>>> losange_creux(4, 3)
#### ####
### ###
## ##
# #
## ##
### ###
#### ####
Partie 1
Il y a plusieurs façons de coder une fonction affiche_ligne_creuse. Parmi les possibilités, citons :
def affiche_ligne_creuse(k, p):
"""affiche une ligne de
- `k` caractères `'#'`,
- puis `p` espaces,
- puis `k` caractères `'#'`.
"""
ligne = ""
for _ in range(k):
ligne = ligne + '#'
for _ in range(p):
ligne = ligne + 'p'
for _ in range(k):
ligne = ligne + '#'
print(ligne)
def affiche_ligne_creuse(k, p):
"""affiche une ligne de
- `k` caractères `'#'`,
- puis `p` espaces,
- puis `k` caractères `'#'`.
"""
ligne = '#' * k + ' ' * p + '#' * k
print(ligne)
def affiche_ligne_creuse(k, p):
"""affiche une ligne de
- `k` caractères `'#'`,
- puis `p` espaces,
- puis `k` caractères `'#'`.
"""
ligne = ligne_creuse(k, p) # fonction à créer !!!
print(ligne)
Exercice : Coder une fonction récursive ligne_creuse qui prend deux entiers positifs k et p en paramètres et qui renvoie une ligne de k caractères '#', puis p espaces, puis k caractères '#'.
Guide
def ligne_creuse(k, p):
"""Renvoie une chaine de caractères composée de
- `k` caractères `'#'`,
- puis `p` espaces,
- puis `k` caractères `'#'`.
p et k sont garantis positifs
"""
if k == 0:
if p == 0:
return ... # cas de base
else:
return ... # on peut appeler ligne_creuse(0, p - 1)
else:
return ... # on peut appeler ligne_creuse(k - 1, p)
Contraintes
Pour cette dernière partie d'exercice d'écriture, on devra uniquement utiliser la fonction affiche_ligne_creuse qui prend deux entiers k et p en paramètres et qui affiche une ligne de k caractères '#', puis p espaces, puis k caractères '#'.
Exercice
Coder une fonction récursive telle que losange_creux(n, m) affiche un motif semblable à celui présenté ci-dessus, avec une première ligne de n croisillons, puis m espaces, puis n croisillons. Le motif géométrique fait penser à un losange creux.
nest garanti strictement positifmest garanti positif ou nul.
Guide
def losange_creux(n, m):
"Affiche un motif géométrique qui ressemble à un losange creux"
if n == 1:
... # cas de base ; il n'y a qu'une ligne à afficher
else:
affiche_ligne_creuse(..., ...)
losange_creux(..., ...)
affiche_ligne_creuse(..., ...)
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)