Aller au contenu

Losange creux ASCII

Objectif de cet exercice

Coder une fonction qui affiche du texte sous la forme, deux paramètres étant donnés.

📤 Sortie
######   ######
#####     #####
####       ####
###         ###
##           ##
#             #
##           ##
###         ###
####       ####
#####     #####
######   ######

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_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 '#'.
  • La partie 2, concerne la fonction losange_creux qui prend deux entiers k et p en paramètres et qui affiche un motif géométrique qui fait penser à un losange creux dont la première ligne est composée de k croisillons, puis p espaces, puis k croisillons.
🐍 Console Python
>>> 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 :

🐍 Script Python
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)
🐍 Script Python
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)
🐍 Script Python
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
🐍 Script Python
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)
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /
.128013,59/f.78rnb _o=ylaepcwgu)vd461`3kRméhtsP(S0+2è-i:050B0t0M0s0W0r0N0m0v0r0s0N0N0p010M0W0u010406050N0y0J0J0s0j0q040Q0o0r0y0=0o0k050e0|0~10120`0u04051i1b1l0e1i0`0B0W0A0*0,0.0:0L0W0x0L0r1z0L0M0^050#0l0r0t1u0-0/011y1A1C1A0M1I1K1G0M0j1j0M0L1M1w010f0%0t0k0s0J0t010*150N0u0s0k0:0T1G1@1_1%1O1*1K1-1/0^0a0m0O0j0o0u0o0N0W180k0m0Z1=0j0j0t0v2g1b1~0k1j0e1#2t1Y1!1Z1H0B200:1C0k1,2d1G1r1t0+1N2D0W2F0k0o2J1G0u2m1j2r2t2X0{1^2h2L1(2Q0j0 0r0^0m0E2q2#0_2!1 2%1O2)2+2-0T2:1_2=2r2C012`0s2,040m0G2~2s0`312^0:34360m0C3a302#323g2-0c3k3c3m3e330o2*352-0D3r2?2$1v2_3w2{370h3B3d3E3f3G3y370i3K3t3M3v3x3h0d3S2@3U3o040E0R3Z3D2M3V3H0E2/1c2;3s3!3,3$0E2}3;2 3?3+2(3O360E393|3b3C3n410^0E3j452t2U0t2t2J2w0B1!2B3u0v2R1:1j4i1k2V3C2Y2;054o0Z2W3T3,0H0^0Z0f3k473u0w2-4I3L3^0f0^1S2F0n0v2m0y0N0t4N4C1(0@040P4!3@2(0^0H4*3 1O4%0b3k0m4J3#0^0u4/324%0z0X3*324L370m564}3u0N0B0^015d0I1,0A0o0W1L0y2F0*0L0$5m2j0v100s2o0U2m0)4o0J2c0N0K1L0Z52595b55565K0m0V0m0F0H0F0*5t5v5x5O0003000F4?4d3~325a2-5L5K5N0u0y0W0)0F0u5R0t1~0v5^5#2X5%5H5*5+5M0m5.5:5O5Q5S0j5u0M5w5^5W5Y0F0g5G3U5)5J630m0!0m0H0m0N190M0m0x5t0k0=0)5B2f0W0f0N6i3,6k5L5d013r5L4_4D0^6D4@6O4,044.4d4^4O1(0o0^0p0p6S6Z1O0J0W0^3)4d6T4;0^515$61576*0:4E046R6X6;3f4{6)4#1O6#046%744+6+6-046/2Z6{014%6@5}6_5+71016}2m0M0y0j1a707h0N1|045d6M6_7o6}0t0(4Z6:7h7j7C7m6`756|0^7r7t7v2X6Y7P010N0E0^000m007a4:0:770S7)3n4R1z4T4V0t4X7I7g7X4%4)7J7X0k4-583U4=7.3u80044|7w7X770V853U6,4a823,4 7M7W7b7Q047G4Y8i4$6?8l6N7h7q0!7T8e6H7!045X7(8a8n017,8B6U4S0t4U4W8r7~8I7|8s2_818H7*8J0^8d8Y328g3%8V0:848%86738S8Z8k8.3U8K8@8C7#5Y3B0e4z4g1m4u0e4s2u4k1b2x980s1J91941s2=940!0$0(04.

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.

  • n est garanti strictement positif
  • m est garanti positif ou nul.
Guide
🐍 Script Python
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(..., ...)
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /
.128013x,5/fq78rnb _o=ylaepcwgu)vd4613kAméhtsP(Sà+2-i:050B0t0L0s0U0r0M0m0v0r0s0M0M0p010L0U0u010406050M0y0I0I0s0j0q040P0o0r0y0:0o0k050e0`0|0~100^0u04051g191j0e1g0^0B0U0A0(0*0,0.0K0U0x0K0r1x0K0L0?050Z0l0r0t1s0+0-011w1y1A1y0L1G1I1E0L0j1h0L0K1K1u010f0#0t0k0s0I0t010(130M0u0s0k0.0S1E1=1@1#1M1(1I1+1-0?0a0m0N0j0o0u0o0M0U160k0m0X1:0j0j0t0v2e191|0k1h0e1Z2r1W1Y1X1F0B1~0.1A0k1*2b1E1p1r0)1L2B0U2D0k0o2H1E0u2k1h2p2r2V0_1?2f2J1$2O0j0}0r0?0E2o2Z0@2Y1}2#1M2%2)0?0S2-1@2/2p2A012@0s2*040F2{2q0^2~2=0.31330C362}2Z2 3c0?0d3f383h3a300o2(320?0D3m2:2!1t2?3r2^040h3w393z3b3B3t040i3f1k2T192H2u0B1Y2z3p0v2P1.1h3R1i3P2X1a2.053X0X2U3o3H010G0?0X0f3N3G2K010w0?0m3_3/3{0k0f0?0r2b1@0x0t0n0v2k0y0b402;3:0=040O4g3y420?183)2|3x2 4j0c3f3 3`2$0?0I4m4u0?0z0V3m0m4J4y411$0M1`04010H0f1(0v0K1J0y2f0I0o0:0f0m0x0J0o0I0J1W0U0g0y1J4:0U0m2k0,0t0I1H1J0Q0m4Y0m460M481J4c0t4e0m0`0j0m0S0k0T0E521x2D0M014I4K4t3p3=040U3^4r2q4L4h4o044q2V5x4n1$0o0?0p0p4x5p3:0I0U2+4D3p4j4H5v0@4K5W5D3i0?0s4T0U4V4a1Q2D4b4d0M0t5Q4i0?4l5U5L3{5N5P5@4z1M4v5K5}3b4B5:3{4j0z5n4J5^1$5r0t0$5/5|4M5~0?5T2V065X5o61305!5$5(0n5*4a570y5.641$4j5?2X6p0k4p6A6i044w5U5Y3p6G044C6g5y6B4F685X6a2?45470k495,584f6S5E6J6D3*6F6H6M6Y0.5G040T606h0.5`042,6+4E6K6{6T6Z6Q746,6@0?0R782 6~2`715R6V5U6m6n6N3:6P5#4U4W6u5j6w5-6f6E6|016C6I625A7C7A0?6L5C6?6q777h5;04677k193,0t2r2S7U3Q1q3S2u2x2s0s4}2r3R0^0e0X0Z0#0M04.