2-dictionnaire
4-pile
5-difficile
Exercice 5 - Expression bien parenthésée (2)
Remarque
Cet exercice fait suite à celui-ci .
On considère dans cet exercice un parenthésage avec les couples ()
, {}
, []
et <>
. On dira qu'une expression est bien parenthésée si chaque symbole ouvrant correspond à un symbole fermant et si l'expression contenue à l'intérieur est elle-même bien parenthésée.
Bien parenthésées
(2 + 4)*7
tableau[f(i) - g(i)]
#include <stdio.h> int main(){int liste[2] = {4, 2}; return (10*liste[0] + liste[1]);}
Mauvais parenthésage
(une parenthèse laissée ouverte
; pas de fermante associée à (
.
{<(}>)
; mauvaise imbrication.
c'est trop tard ;-)
; pas d'ouvrante associée à )
.
Écrire une fonction est_bien_parenthesee
qui détermine si une expression
passée en paramètre est bien parenthésée avec les couples ()
, {}
, []
et <>
. La fonction renvoie un booléen. L'expression
sera une chaine de caractères de longueur au plus 1000.
Exemples
Python Console Session >>> est_bien_parenthesee ( "(2 + 4)*7" )
True
>>> est_bien_parenthesee ( "tableau[f(i) - g(i)]" )
True
>>> est_bien_parenthesee ( "int main(){int liste[2] = {4, 2}; return (10*liste[0] + liste[1]);}" )
True
Python Console Session >>> est_bien_parenthesee ( "(une parenthèse laissée ouverte crée une tension intense qui dure toute la journée." )
False
>>> est_bien_parenthesee ( "{<(}>)" )
False
>>> est_bien_parenthesee ( "c'est trop tard ;-)" )
False
On pourra compléter le code donné qui utilise un dictionnaire ouverture
qui renvoie l'élément ouvrant associé à la clé fermante.
Python Console Session >>> ouverture [ '}' ]
'{'
>>> ouverture [ '>' ]
'<'
.128013="I_ey3qdRuéxEgPvr08-èzê}fLbco/m]h({apl)7ç,'[n sS:6w
1ki.ôF!9Ot25;4030d090(0F0Y0H0Q0P0x0H0F0Q0Q05060(0Y0G06020V030Q0f0A0A0F0m0a020R0y0H0f100y0O0P000F0A0G0+0P0e091a0m0c0f090Q030z17191b1d150G02031I1B1L0z1I150d0Y0l0^0`0|0~0`0O0j0f0F0j090p0G0a0(0C1k0P0C0Y0j0C0H1:0C0(13030:0w0H091U0{0}061/1;1?1;0(1|1~1`0(0m1J1+0^1g0Q0G0F0O0~0)06201W060u0=090O1o091`2i2k2p222s1~2v0A2x02040P0k0m0y0G0y0Q0Y1j1l0.2g0m0m090x2S1B2z0O1J0z1+2'2c2e2d1{0d2B1X0Y0O2u2P1`1R1T0_212;2?0O0y2`1`0G2X1J2$2'37162j1l2|2q300m1a0H1`0F1.2X0u0~0108080x31091?2 0y0p0b0p0W130P0W1B0F383b143a2A3d223f3h3j3l093n063p3r3t3v2@3y0p2n020P0)3F3H2k3J2$2:063O0F3i1J3k0C3m3o3q3s0.3Y303!0b3C0b3)2#3I153-3M0~3:3=033@3_3U3{3X2=3Z3z0,3C0,441C463K3c1V3N0y3g3;3Q3^3S3`3W3}4j3 3z0*3C0*4p37473b3.4b4z4f3V3|3u4F3x3z0T3C0T4L4r484u4a4w3P3?3R3T4T4i3w3!0J3C0J4$3+4N3L4(3/4*4y4,4A4.4h4E4;3z0o3C0o4_2%4{4t2}4~4x4c4e4B4g4D4V560p0%3C0%5b3,4O495g4+4d4-4C4U3~4X3A0n130W0n5t5d4P4 5i5A5l5C4W3!0W3B025U5K4s5M5h4R5k4/554k3A3$0W3(0z3G454`5Z5w4Q514S545n5)0W415W435.3*5c5=4}5@5z525B4:5|4m5W4o615:634'5f665j535m5D5T4I5W4K6f4q5;6i3e5N5$6m5R5o0W4Z5W4#6t391O351B2`2*0d2e2/5w4U2_1S1J3409363I6g1J4U6Y2A0Y0d0~3q2$5T3Q6(6*6n5S3z3B0P2F096:6B5|1`6f6w3N130y0f0l0m2k0(6!0P645f0y1305797b2q0Q3$001x0y0(0+0D0N0E000H7o7l0f7n0+6!156u2%5Z6/066+3b3!3$5z7F5`6o3z2n6^2w6{6a4G3#6~5/704a130u094x0O787C3%7h227d027f7*7a7Z067j137w7y0I0B0t000j7v7m7o7A6!7E6)7G086,3z5~7L877N6=3y2o6_7T5(7V8c6 5v6572747%0(0f2X7g7?7.7:377=8p5f12020E0t798C4|5f0x5V010P1R2Z0Y1k2v0Y2X0P0l6(09847*866:8a0p6c8d8k5{7V4m7R2G8-7O8*7X6%5e2q0X7#4w8x8D3e130Y908L2q0y0U930O958{3N0w13761Z8#8%7?8F0D857?0O9f022E9o91229m9u9671027$7'7)399l130I0I0S8$9F4O7M897I4H6.8e6;5o4I8;6`886|7V6q3)0P9'8K9d7!02730l8t8v9j9M9z0~8F0N9y9*3/7#7%1a7(9`3.9^a15?93a44}8F0B0B9c3.8zaca59,749h9E6Z9G029_9k9v9+94ap9?06a99Lal9N9T8)6E8,9Z7U5E4Z9X8?8gaC617B9=1l9O8)4?4,9O9!5E4?aIaE8laW8_aNay6'aA9Q0p58aT9TaV3!58aY8f5oa,447?8}020.0uaf650u131z0(080w0Y2u082j2X7(0C1z099;a'9{9xat9{0Ob20h6W0|8T9bbka29H9K7*a%3+8'888)5qa-aJ5o5qa=9U5)bD9%9(7,9+0G2ta 7c7ebS2q9^abbxa1aQa*5I9SbF5|5GbIa/6?5G2'3G9(9)3.a{0u8 7;bO9|020xbV7-99022=b 9+09bo2Xbq1ka78E13bw4Mb!a)2k5T5VaDa?5|6@8jaZ8.5E5U8_b;b;b{a{0Ya~b`9p13b~cBaq06989ac4b|9-ajcbbWcdaxbz3-b#ci6?7K3kaUaF5T7Qcpcm7V5,cucvc+b{bm02bQ1~cO7-130Zc=9+0F0G0G2u0dc_av139nbtagcEaObu020IcR7DcTch0O5T8ccYa.c!6?41b+dk3A8nb:c+b=5wa{4VcA8Bc-cDcKcIc2bsdycC9B9~77d08Fce4rbtcUdf6?8+dib(c(8:c%bJdVc*dsbNa`93dx3Idt8qc/bRcFau8z8Ad)b{bXdBc1b_dFcGc.c:bgcScG7.c^d4d+2O0GdKd2dad.9{7.0$d;3+d*6j8r9.0m8u8we4ccand0c.d6bhd80BdM5;dOde6pb'cq8@0W9WdXb,3A9$61d#d#cx9g0/8vdEd=a`0x130#3;0Qd 63ez8(b$aCdTeD8g6D8i7Se*6CaLdr9'eO022XemeSegdzd,c;ebad7eef2%ehcPanbYcf8%0z6$1M6K0z6M1B0(6Ofh2-2(0F1}6X6L6U1H8`3.2X0A080u0F0X09080C5~1t1v1x1z0Pex7D1O3J2`3.0F0d0A1k2Rbr0P2=b^131HfPfRfT2S0p100(2a02070Ob^4x2S1AfMfs070H0P0a0P3k0G1h2Q098v0@fy0K1k0@2U3s0O0Q2c0f8W1 1~8Q0Y8S8U0;8X0.0@9-9/c8f|0|0y0x0Y0gfI0F0f0h0P9C2Gem1ze31P031g3J1?3J1Lgb2M1Z020v3kek2Q1-3|gx0P2u8Q8v0P1x0Y6^0Mb30P2j0@0j0g0O0g761?0Qfn1~e3gP1k0j2'gIfO5w1Y1!1$1'1)1+1-241=1@1_ft5w2D2u2w130k1*1,e{7D6W8`626#3tftdP8*3AeCc'3x0,hydna!hx6@685Qc!hCck8oauc.gpel9:dBbUf05w8F0Ed00Q5V00010b0%0+0Ih$h'7zeof6fK7+7?h!7_h%h(0Dh+h(e8020LcKh?02h{0+0Bi3h}h:f522i1i30Ni6h.9w13h hV4}ibh^0+7~imi7i0h#im7sipif9@ihirh@h,7 7vivd7hWcQij5filiB7u0+ieiFa8138IbZfafc6Jfpfffr1BgM15i#1K362cg~gSf}fv0Y0q8X0F9.0x0P0w730_1 cei)gR1MfN1S3.h41#1%1(hmha1@261^2ycGhh6_hkj7ho6V6K6I39fcdde%ci0*hybEe/3Zjrcoe.hA0pjw2ohI5'crjAjsa_d|ejcNiI97hUd{au7^i2827p7r7t817x83iTd7hwjrcXfWdjhFj%e-8=ju3 j+5PjE6oj+b/hfd+gDdJjMc?7/i07kjT7|7~80iNjTdbhveAjrdhj(dU3xkbj,9Yjzkgj;kj8hj^e}hQgFhTj j}ix8GiS8Bi90~8N138P8R2S8V8X8Z0.k8bA7Hjq8^jtkmdWjydYkf8^klkTjG8+hN9{b@d`eTjJc2d^cJku3/9r9h1%h}d3iP6j9r9tiwd102k=euagj{a0k`8F9Ih:bydcazjpdfjr9$e)kmeGkSa/lbjC5_kXlij^cwdGkqhSl213aok?92dH9Dh}luk~d+aslvig02aaksf3h;k(cMj|lEkvlAe0hOa6lslGkKfbhufdiX6M7Bi%i%gOi}g gT0PeZg92Uba2g1p0m0gbdgafVi|gQg i 1Qj1h32kh5j5h8hn1.j9hdjcaujehj02hlh9ji1Kjk6Z8%jnl8bB7I0TjHldkXmqjxj-jzmulj5%mxjHk!4PjKlNk'd/jOmH9{jR7`7o7q7siMmNh-f9j#eAmqj'cZhFmXkhke0pm#kWa/m#kodGl0ake|8ymJm:cGmMk27}iCk6jYmTdNmVl9m'knclmt8hhEjFmqdmjDmBdqj_eiahekkrk,aek,hXer9}lylUlQl7lSk)lUewcKhPaimGlRbiltnnnulOk{f8mKb?8~0mnxlTjPecc1c3k,9q9gm2e!nef6k}nB4Pk^2uk;nEm.h}9Ikxm mkiVhqfq0l3J0zl%0YgNi(l|1e2k0@1~0@2=8R1z2#l)h~f|i=0P0f1lgb0aggb^0Ogj0O2?0H0L0P1-0r11c}ob1l0g0H0g2G7(8Q1 036$n*lX0.3%i;2Y0^3ugdgs0QgugwoA7a6$lMl16$on0dn 0Pgg0A0s2Goo0m0d2XgHj02{4}j3h6j6mgm725m9nY2C2tjfmejh85n;jl6Zmma(n10Jmrkdj.3xp7mvkikXpcmz6Ac!pgm,lLnzl1nPf1ktpp5wm^m}mPjWm|7ykKjomocip7mYj)jFpEm$pa0ppIm)pj7WplntoEps4}nkpTiJk1m}k3m{mSpAmnkMdfp7kcmZpHn6eHpOnalka/p*8_kp8shRenpWjNprnJiG8Gn)iqnT72cKk$nMq59Bh}iip}9A0yk*dDnx9roqe7lUn!nsblno9 m/qpd8qdq0d+oUqto`kv0In-ey6In:fel#i'0'0fi@b71lg#0g0x0CnW77o!1 0m0!gg2UoChuoE6$g!0(oShuqz1Bq(oYgaqW0Pqlo,l$n`i$q`i'16o70if.nSg}gRon0=g!gb0Po$o'2Obqfo8Q0MqR0mgel~0-m0o/m2j4h7jho@hc27ma9{mc2Gjgmgp0mjbzmllYpBp(a+p8p,6o0ohDp/hFrMhHp=c!rQp^lpp`niqe0~pVqxk@13kEn(k`nU02qlr)nGc.pSlBepqwm?ntq-lU9IlWqHl!iZn^q|0zgK7BqJff0/0;0?02.
Indice 1
On utilisera une pile qui empile les ouvrants, dépile un ouvrant dès qu'un fermant est rencontré en vérifiant la correspondance, et qui ignore les autres caractères.
Indice 2
On pourra compléter le code
Python def est_bien_parenthesee ( expression ):
pile = ...
for c in ... :
if c in ... :
pile . append ( ... )
elif c in fermant :
if ... or ... != ouverture [ c ]:
return False
return pile == ...
# Tests
(insensible à la casse)(Ctrl+I)