Aller au contenu

Formes pleines et formes creuses

Le cadre

🎨 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.

Exercice

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
###(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]x,59/f.q!7B8rnb N_o=ylaepcwgu)*vd4613kIAméhtsP(S0+2[-i:050I0z0T0y0%0x0U0r0B0x0y0U0U0v010T0%0A010406050U0E0Q0Q0y0o0w040X0u0x0E0|0u0p050g13151719110A04051p1i1s0g1p110I0%0H0;0?0^0`0S0%0D0S0x1G0S0T0 050,0q0x0z1B0@0_011F1H1J1H0T1P1R1N0T0o1q0T0S1T1D010h0.0z0p0y0Q0z010;1c0U0A0y0p0`0!1N1~201.1V1;1R1@1_0 0a0r0V0o0u0A0u0U0%1f0p0r0*1|0o0o0z0B2n1i250p1q0g1,2A1)1+1*1O0I270`1J0p1?2k1N1y1A0=1U2K0%2M0p0u2Q1N0A2t1q2y2A2(121 2o2S1/2X0o160x0 0r0L2x2,102+262.1V2:2=2@0!2`202|2y2J01310y2?040r0M352z11382 0`3b3d0r0J3h372,393n2@0e3r3j3t3l3a0u2;3c2@0K3y2}2-1C303D323e0l3I3k3L3m3N3F3e0n3R3A3T3C3E3o0f3Z2~3#3v040L0Y3*3K2T3$3O0L2_1j2{3z3+3?3-0L343{363}3=2/3V3d0L3g433i3J3u480 0L3q4c3s3~473%4h3x4k454f4o3.3H4r4e3B403Q4x3S3 4g3.3Y4C3!4E4u0L3)4I4m3M4u0!3:4O464Q3O0!3`2(4s4z4F0!424!4y3,4%4b4*4D4n4X4j4/4J4;3W0!4q4@4P3U4R4w4}4V4 4X4B524t4X4H574$4R4N5b4,4u0M4T5f4K3O0M4Z3|4+5l3W0M4)5p4:4W5s4.5v4^5x3d0M4?5A4~3@5s4|5G535I5D515L585s565Q5c5m5a5U5g5m5e5Y5r3d0J5j5$4_5(5o445q5,0 0J5u5/5w543W0J5z5^5B5`5(5F5~5H3-0J5K635M655P685R5(5T6c5V5{5X6g5Z5{5#6k5%0 0e5*6o5;040e5.4d5_5N6q5@6y5 6A6v5}2z1t2$1i2Q2D0I1+2I3B0B2Y1`1q6M1r6K2*4k056S0*2%6E0N0 0*0h3r5:1V0C2@6.6z0p0h6+0z0^2V0z6?6E0~040W6 640 1Z2M0U745M710F0(3;396;3e0r7j7a390U0I0 017q0P0h1;0B0S1S1R0:2t2v200D7y0r0+0r7E1)0%7C7y7f3B7n2@7j0r0s000y7t0%7v1S1 0:7E776{0r0k2f0u0E0o0r0E2M7H1G7;0(7/0|1J0U0z7.2#2V0T7N3#7P7i7j7q013y7R0r6/0`6*040h3D3r8b6@767?6~4k8j6E0u7h2V8i8c3a8l0D787l3B717e4r8a8a8v0p0q0 7 0p816!6z71738O6E0p8x2M8A3#7c3y064#3#8e6,8X3?7h8b8S646_047%0t0A1R6}8*1/8Q8`300 0Q0u0|6-8.7b0 0d8u8k048I0t6S0x1g8z94397c8D4!8G6z8e2t0T7-1h8o8H8 910%932(8p5H0u0 0G988T0 9b9d9f6{8!8$3?8(0z9y2{8v8,8}3m8:8=0B2t0E7|9V018|9h4z9v929%71979t999I1c9K799*8Y0 7d897R8v8e9x9F759a0q9c9@0p9g9z8v9C040v0va35M0Q0%4h9.0 9k3|8F9 9n0 9p9rah3u9,a28Ear6)0 0z0/8n2*8Pan9~aqa0at0+av9;9G04909-aQ9B0 0Zaw7O23041{88aV5Mad9Ea)9i0 8RaHaR9?9ea99La-3Bad0$aZ3#aj0 6C6(5H8Za`3#adaYb63 ay9R448#aM048)9`8+6=bj2/8:7A0,0p7D0z8?8^9sa;b4a/9%8UaS9wbd6IaI049:ab9=a67%9_bx95bHa~bba5a7a@aa9SbG9}aA7k990o0R130x0,8NbJ8q0 agba8{0 0#0baK9A5M8e8g0obR2/0 0%b 1V8rc1bw2{b`3u8J040o7CaGbX70bzbm8~bTbMam04bZ9laqc99+ccb(0Eb*0yb,cgaW040ibA0 0y0A0A1?0Icna:cA698Vbt8@0z8_cj0`9)bOaxbCaUcX8B96c33m9Ha69Ja^bNcNa.co0Fb_bgau0oc736cs3,atcvcxczbe9N1/9PbEb35M9UcU3abo2ubqbs9c9!0ccLcEcZazc#9{bQb;ck9bcmda9/c(8wbTc,bW368v9jc?as04dmc89ucl8mc.c{acb/b:b-5Hb03.cnao44crc|9OaN9qc_dw710#dk8=cRcTdn3?cWc/ctaTdHdBbGbIdIbKbU9^cn0Fb^b!dZd4aDaFdVb_9maRb%b)b+dwaddQd|ch04d*dabBd,bvcfd_ejcMera4d@d6dCc%dqc)dya8dAbFeje1e9aB5Hb|8heAdxc2eNc5dGc`2ze430cbcdbreqeFby72dkdsdLef0 a}eNdTb2eycodW3idYeaa4eccweedaadcDemcFcHcJdjf18;8mdg0z9#e!d7c:ete#cOdlexd`dwbBa?d du9|c=e3e_fhe{d09%e dkcGcI0pcKfpe%f6eocS8WfEfffdd?bDcnd{dNd}dza_d/b=c;eIb#aCccaOd%eNbBfve}4!bfdFbifV6:blf:9W0 7J7LcQbvf5f?dxewfPflc*0tdtf~dDe3dJf*cye+aed(b?e2cqfZeK0 b}g2dGef8seT3e8HeXcef}d=c}dK8yfUgwd:9|e?10dYg9c f+gB1/fyf6fAf4fKd+f8d-fJg6cif~bBg0fEfQeUdJePdRa*aXdwdT6xfMdo0FfrgheV8dd#aPg)cYgad13if-f!f/gKf;grem8:f_br1Rf90EdigQf6gZgVdpg{cte)gzdMfgc:cpapeJb{c1d6g@dxhleEgr6zegehfR6Eg-e8fshs399of$gqhwd)dkhgh3cV0 gghrgiht04aE9$fEgE06gGb$gIgbeQb/geekhQfOfEhVdXcrbgglf(c1goc6flgteZgveufhhygAhEcBe-hja ak04e:bYh%e^hJctg}fx0 f0gXf2fBfDhhfLdJ9Y9!h#ith;c!hS9(ezibbSg(eicBb9iF1/e/e0g=hW8FgHedh,f~gMip04gOfCi3hoctfHd.iCd;i4cYhRi,c$hiiIi5bLe*fEg;fYhwhLd$hNiSe|iU5p0g6$0z2A2#j66L1z6N2D2G2B0y1Qj90g6M11jj0+0-0/2|2Q390y0I900p2m0%1g0r0q1g9#0 1ojsju1gjx1g0$0|0T1%040mjC9_1w1r040O0p0H1?0T7}2p7U1e2t0:b}1_0:0D0R0u0Q0R7J0j0E6{f0jTjjjb.