Expression bien parenthésée
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
| >>> 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
|
| >>> 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/p.:iF,vl4P);h=obk!56uan{}zcgrtS_xef12wé y]q0m[-s789(d3050$0J0F0x0f0j0X0P0C0j0x0X0X0p010F0f0c010406050X0w0U0U0x0E0Q040G0q0j0w0{0q0y050b12141618100c04051o1h1r0b1o100$0f0i0:0=0@0_0=0y0D0w0x0D0J0W0c0Q0F0o1f0P0o0f0D0o0j1T0o0F0~050+0r0j0J1A0?0^011S1U1W1U0F1$1(1!0F0E1p1O0:1b0X0c0x0y0_0M011*1C010K0-0J0y0x0U0J1!1 21261,291(2c2e0~0a0P0l0E0q0c0q0X0f1e0y0P0)1}0E0E0J0C2z1h2h0y1p0b1O2M1_1{1`1#0$2j1D0f0y2b2w1!1x1z0;1+2W2Y0y0q2$1!0c2F1p2K2M2?11202A2(272,0E150j1!0x1R2F0K0_030H0H0C2-0J1W2+0q0W0%0W0L0~0P0L1h0x2@2`0 2_2i2|1,2~3032340J3601383a3c3e2Z3h0W24040P0M3o3q213s2K2V013x0x311p330o3537393b0)3H2,3J0%3l0%3P2J3r103T3v0_3W3Y053!3$3D3(3G2X3I3i0k3l0k3;1i3?3t2{1B3w0q2 3X3z3#3B3%3F3*433,3i0u3l0u492?3@2`3U3{4j3 3E3)3d4p3g3i0v3l0v4v4b3^4e3`4g3y3Z3A3C4D423f3J0Y3l0Y4M3R4x3u4P3V4R4i4T4k4V414o4Y3i0Z3l0Z4%2L4)4d2)4,4h3|3~4l404n4F4@0W0!3l0!4|3S4y3_514S3}4U4m4E3+4H3j0T0~0L0T5e4~4z4-535l565n4G3J0L3k045F5v4c5x524B554W4?443j3L0L3O0b3p3=4(5K5h4A4/4C4=585R0L3.5H3:5W3Q4}5!4+5$5k4:5m4X5+465H485:5Y5=4O505^544;575o5E4s5H4u614a3R1s2;1h2$2P0$1{2U5h4E2#1y1p2:0J2=3r621p4E6x2i0f0$0_392K5E3z6E6G695D3i3k0P2n0J6M5C595G3;642}0~0q0w0i0E210F6z0P5?500q0~0p6,6.270X3L010#0V0z020j0F0n016z106g2L5K6L016H2`3J3L5k795)6a3i246R2d6T7a6N597e616Z3w0~0K0J4h0y6+763M6@1,6:046=7B6-7t0_6_0~010m0R0A020D71737B752^3T7g0H6I3i5-7f6F7o6V5R3.7l2e6U5|4q3h1!7s5g5@6#6%7x0F0w2F6?7K017F7H2?7J7`500}040z6z7D3`7v8e838b0e82896!040q8m4*500s7v4g8r4 8o8q7B8f018b0h8x4z8h7I8C0q0N0~2X8G5#0r0~0B0|8i8n1,8b0#8V8s8z6%6)7z8!8y8X0~8F8J830y7v7x158)8B8j0~0m0A748*0P7!7$0W5~7)7;5Q7?467/7n7h6O937^3p7X6y7Z7*7b213J6c957+7=5p4s9a965*7?9o7_8#1,0s8;040K2t0U8 5h8M7C8_8W3`9D3b0j1(2H0f1f0X9I4+9K6-9M9A0_9C8N0U2v0E7A878C9D0)0S0w0J8P4+0C5G030P0c8?0*2B001d0-0f0X7x2B0J9=1)9=0f909*0j0O2e7z1)0c2a0/a02l0J9W7W8 917c4I6K9k7p5R4J9u9q975p4J2M5X839`0~9|2x2,2A0-0Paq0F9}2w2x1%1)0$a20{1Wa60E0P1(0/a$0Faq2r1N1P1gas9#aPay924!4T7!7,7?4!aC9c59a{6Y9N018u040)0K9X509Zbc2}0K0~aS0H0r0f2b0H202F7z0oaq0J9@a@3U8Ybf7u040J0I6v0@9Ua=7Yb68b0m8la?bI6Da_av0W4_a|aya~5p4_b1az7?bT3P0Pb(889$3V0~al1(9^6/6;b:278b0V0R8~bwau9m3i5bbU9v7i5a256Sc29dc0b%b)8Cb80K8w8/b69Pb?7E9K8Ocgb+9DbCbE2x1fbz0_8kb{bOa^6M925taxc76W5rbZbW5E5raH3Mb)cNcc8Nbbcn8+8g040Ccj0_8L8NbH3rb*cTb,8p8%6*cu8D0~bM4watbQb~3j6X33a}9r5E6Qc6aD9w5p5F9fcMcNd6c%8H04b.bvcy3U7F0dc-9D0x0c9~0y0$c-bybw5#0~cWdq4+bKcx9i4yb}0y5E7ec`bVc|6P7kc b25+7r3pd7b(cPbB1WcR9.8:dscX84clc#3Rd8dr9E8?c,du8ac/dx6h9jcAbR5,cDd0c3d?cHdG3j7(5:dOd6dQ0fdTc$9/b-2adX8586e58`04b_e99KcfdUche7b/d+27dfdhb-2udo0~0#0me90~0tebd#e6c*0i7~80dcdyb+b^eqcVet040Rc:4bb|c?dB6P94dEcE5}c57meY7?0L94d e0dOdQ2F7 0Ed!2Ld$4+0s0C0~0g3Xa6d.77d:7ocB9oeXd^9d0L9tdJb!d29ydNcb83b8e.80e;7CdVdae8cSde6;eAe=8Cb^b`bN6y0b6B6i6w6k6t1h0F6nfE2S2N0xaX2M6l750)0+0-0X04.
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)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)