Évaluation d'une expression postfixe

Exercice conseillé en version À compléter
  • Les exercices conseillés en version "Vide" sont conçus pour ressembler à un "exercice 1" des épreuves pratiques au baccalauréat de Terminale NSI.
  • Les exercices conseillés en version "À compléter" sont conçus pour ressembler à un "exercice 2" des épreuves pratiques au baccalauréat de Terminale NSI.

La difficulté de l'exercice a été choisie en partant du principe qu'il est fait dans la version indiquée.

Nous avons l'habitude de noter les expressions arithmétiques avec des parenthèses comme : \((2 + 3) \times 5\).

Il existe une autre notation utilisée par certaines calculatrices, appelée notation postfixe, qui n'utilise pas de parenthèses. L'expression arithmétique précédente est alors obtenue en saisissant successivement \(2\), puis \(3\), puis l'opérateur \(+\), puis \(5\), et enfin l'opérateur \(\times\).

On modélise cette saisie par la liste Python [2, 3, '+', 5, '*'].

De la même façon, la notation postfixe de \(3 \times 2 + 5\) est modélisée par la liste [3, 2, '*', 5, '+'].

L'évaluation (le calcul) d'une expression arithmétique en notation postfixe peut s'obtenir à l'aide d'une pile en parcourant l'expression de gauche à droite de la façon suivante :

  • Si l'élément lu est un nombre, on le place au sommet de la pile ;

  • Si c'est un opérateur, on récupère les deux valeurs situées au sommet de la pile et on leur applique l'opération. On place le résultat au sommet de la pile ;

  • À la fin du parcours, il reste un seul élément dans la pile : c'est le résultat de l'évaluation.

Dans le cadre de cet exercice, on se limitera aux opérations \(\times\) et \(+\). On garantit de plus que l'expression est "bien formée", c'est-à-dire que l'expression arithmétique correspondante a du sens ([2, 3, '+', 5, '*'] correspond à \((2 + 3) \times 5\) et a du sens, [2, 3, '+', '*'] correspond à \((2 + 3) \times\) et n'a pas de sens).

Pour cet exercice, on dispose d'une classe Pile qui implémente les méthodes de base sur la structure de pile. Cette classe est déjà chargée dans l'éditeur, vous pouvez l'utiliser directement.

Interface de la classe Pile
  • p = Pile() : crée une pile vide et l'affecte à la variable p;

  • p.est_vide() : renvoie le booléen indiquant si la pile p est vide ;

  • p.empile(x) : empile l'élément x dans la pile p;
  • p.depile() : dépile un élément de la pile p si elle n'est pas vide et le renvoie. Provoque une erreur si la pile est vide.

Compléter le script de la fonction evaluation_postfixe qui :

  • prend en paramètre une liste Python représentant la notation postfixe d'une expression arithmétique,

  • renvoie sa valeur associée.

Exemples
>>> evaluation_postfixe([3, 2, '*', 5, '+']) # correspond à 3 * 2 + 5
11
>>> evaluation_postfixe([2, 3, '+', 5, '*']) # correspond à (2 + 3) * 5
25
>>> evaluation_postfixe([2]) # correspond à 2
2
>>> evaluation_postfixe([2, 3, 4, '*', '*']) # correspond à 2 * 3 * 4
24

###(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 : 10/10

.128013fe)à61ipmSvk(q5rxOd;Po/aR l+é8y7_3:À*tg.U=swc,èhDù!2nb094u050t0c0M0y0h0B0R0A0T0B0y0R0R0Q010M0h0i010406050R0*0j0j0y0q0F040k0w0B0*0~0w0#0A020y0j0i0u0A0z0c180q0o0*0c0R050x1517191b130i04051G1z1J0x1G130t0h0l0?0^0`0|0W0h0N0W0B1X0W0M11050.0$0B0c1S0_0{011W1Y1!1Y0M1*1,1(0M0q1H0M0W0?1e0R0i0y0#0|0!011.1U010b0:0c0#1m0c1(24262b1:2e1,2h0j2j040a0A0v0q0w0i0w0R0h1h1j0,220q0q0c0T2E1z2l0#1H0x202Q1}1 1~1)0t2n0|1!0#2g2B1(1P1R0@1/2!0h2$0#0w2*1(0i2J1H2O2Q2{14251j2,2c2;0q180B110A0g2N2 122~2m311:3335370!3a263c2O2Z013h0y36040A0I3l2P133o3f0|3r3t0A0)3x3n2 3p3D370p3H3z3J3B3q0w343s370f3O3d301T3g3T3i3u0G3Y3A3#3C3%3V3u0E3+3Q3-3S3U3E0(3?3e3^3L040g0%3}3!2-3_3(0g391A3b3P3~46400g3k4b3m1K2_1z2*2T0t1 2Y3R0T2=2t0+1Q1H2^0c2`3b3H054u0,4C4e2c0m110,0b4E3,460S374P3@4f0b110c0l3s0*0y2E0H2A0R0M2e0r0c4U4J1:10040n4:45324Y0r4A0`0h1i4_3p4?0d0J3O0A580A3Z3K110i2f3H5a4Q2c0w110Q5g5b3R0#110v5f4j2P5o3^4?0n0d57595w464L040b3T5n5i3g4Y1,2s0#0M5J4V5j4S042/5R4;3C4|4~2C515u4I4`4=11565(06595:5h5S1:5F0h4O5(5=5Y3q5M1s2g5Q5{5D5j110Z5m635K0|0R2904021v0w0M0u0C6f0*6h0u5X5*0|0w5U260t6p5c040c5N616w3R5k04676C3^6c116l6n0L6L6i523R4?5-2{5/5;6W645L045e1,6Q3^6E0O6%4f4Y1n5t2}6a015y6+4{6y6A5P6@5+045A5.6W586Y0|5F6z0R4/5(736=5,5B715C6;5^5`2{5|6q5~6_606{695?6r5l687j7a6J6e6g6i6k7z6o796;6S7d7e5;7a5q042J150B0.627v6;6E7u3b7k6x6#786:7r016)6|5Z040,7Z7)7b4@6 7S7$6E0C6H6,6!6/4D7T116*7E7$7L7,7|4k7F115z7H7e7a750;7!7}7$7G707I6X6;7L7N0*7P4%7_65047V3m7X5p5d855v7~04807#5}830c7-815}5y7;7W7a6E0L8s6Z8J8F7l7(8K7l8H8U8g8L888N3m6V8k7K8z6$8Y3p8X8V6x1s8#868h887.8n1x8p7Q7.547H8c112J0M0*0q0#8S7*8_8B7?7 8}4M8I8A5)538(3Y0x4G4B4l9s0x4o1z0M4q9x2W2R0y1+9u4o1F9m3R2J0j0H0b0y0m0c0H0W0I111r1t1v1x0A6T4D1M3c1G0s1j152D0A250=0e9-0_0A0^0A0t0D1t0T0W1-2^0D775P0D1-0t260=0B000D2;0#0T0D801N1I040P1j0D0B9`619^0*0A1`0c0yaq1x0M0A0*1j2;0j0$2J0A2C0?1-0#00aw0A0#0h9?002z0D0q4%0c998x3^192D0W180M0c0r11090n0C098)2PaMaO7aaZ20a$a(a*0n090~2s0Ra.3H0O0A9)arawa41i0T5a9r3p1=1Z1#1%9I3^7h9c7m6z7o7R8O8C6G7q5}0R0g6K030I0(6j02bybAbl6s116ubl7Lbn5Obp8w8P668va:7wbw6ebD0u6NbW927c799q4v8D1K9%040Xa69?1-0T9=0w0Y0Aalan5P0AaLaz0AaRaTa%990Ub 1j1}0/a%aF0D250qb`ax9|0y9X0?9=4^bc3Rbe1@1$2k9g047^b$9r3u0-bb4vbd1#cpbhbP048Rcvb(0db3060K0?0Wch1w0A5H0h0=1i9^cb2fb/0=0,0*0r9-9K0h0c0q0=aBaD9Y2G9@7Zb|axcW0c0b0b2K981-a8c04%500#b3b58^cZ1,0Acd7O7Qafb+cN9@2e2Faqcc4u990Rc4a8a(5#d4b^0.b{0$c+1j5H34a3c40:aM1-7Nc91v00az1-4!1,aWa50#a70y9-cZ0Jb/dba0904%9^d0a9dO4$2E0Acid12FcYdacy2J0#0l0wc+0A0h170D1PaUbMdf9Hb50iaVaxam0N0V9KaoaT0Tdn0q0T0h0qdYbc2gc)2=0Db;b{0/dSaO5-ag2*cB1?bgcr5}2p2g2i112v0k0T0q0 ax0v0F205%2}4A5)2|4Dcw957+c{7.5U5a8:5p4X6yd*d31i4)2B4,0h4.b!4@9i6y4}7N5$9be(5x1155948m8.8fbO8CbR3u8-045s8/8?6R9o8j727g11dBbJ5 bMbF5U5Wbt8Z5!e|d4e@9!8*8bfk5V7ibq82fo6Bft8;7tbl7x6ObB7Cfy8a71fbbLfI7=5}7Ufn7{fe8$8W9he 7`841,0qe@89fJ6D11cufXfuf#f69ffYf)ff3 9j7Zf.f*2c8MfSfj7$8d5_f!fV7pf^fK8uf9aX46fN7C6NfQg46}fz3y8kg88GfHgefFf}8uf!9ebi468=f%6xf,c,f/a/fa8CcHgf8yf`7.gF8`gveZg2gKg7gj6^gCcF8EgGgQd8f-f/e_gdbNf|7l93fig!5@960-99e~gPg0gRgp7sb)h17mgIg3f 46g65.1zeX1M4m9v4y139v0-0/0;04.

###(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 : 10/10

.128013fe)à61ipmSvk(q5rxOd;Po/aR l+é8y7_3:À*tg.U=swc,èhDù!2nb094u050t0c0M0y0h0B0R0A0T0B0y0R0R0Q010M0h0i010406050R0*0j0j0y0q0F040k0w0B0*0~0w0#0A020y0j0i0u0A0z0c180q0o0*0c0R050x1517191b130i04051G1z1J0x1G130t0h0l0?0^0`0|0W0h0N0W0B1X0W0M11050.0$0B0c1S0_0{011W1Y1!1Y0M1*1,1(0M0q1H0M0W0?1e0R0i0y0#0|0!011.1U010b0:0c0#1m0c1(24262b1:2e1,2h0j2j040a0A0v0q0w0i0w0R0h1h1j0,220q0q0c0T2E1z2l0#1H0x202Q1}1 1~1)0t2n0|1!0#2g2B1(1P1R0@1/2!0h2$0#0w2*1(0i2J1H2O2Q2{14251j2,2c2;0q180B110A0g2N2 122~2m311:3335370!3a263c2O2Z013h0y36040A0I3l2P133o3f0|3r3t0A0)3x3n2 3p3D370p3H3z3J3B3q0w343s370f3O3d301T3g3T3i3u0G3Y3A3#3C3%3V3u0E3+3Q3-3S3U3E0(3?3e3^3L040g0%3}3!2-3_3(0g391A3b3P3~46400g3k4b3m1K2_1z2*2T0t1 2Y3R0T2=2t0+1Q1H2^0c2`3b3H054u0,4C4e2c0m110,0b4E3,460S374P3@4f0b110c0l3s0*0y2E0H2A0R0M2e0r0c4U4J1:10040n4:45324Y0r4A0`0h1i4_3p4?0d0J3O0A580A3Z3K110i2f3H5a4Q2c0w110Q5g5b3R0#110v5f4j2P5o3^4?0n0d57595w464L040b3T5n5i3g4Y1,2s0#0M5J4V5j4S042/5R4;3C4|4~2C515u4I4`4=11565(06595:5h5S1:5F0h4O5(5=5Y3q5M1s2g5Q5{5D5j110Z5m635K0|0R2904021v0w0M0u0C6f0*6h0u5X5*0|0w5U260t6p5c040c5N616w3R5k04676C3^6c116l6n0L6L6i523R4?5-2{5/5;6W645L045e1,6Q3^6E0O6%4f4Y1n5t2}6a015y6+4{6y6A5P6@5+045A5.6W586Y0|5F6z0R4/5(736=5,5B715C6;5^5`2{5|6q5~6_606{695?6r5l687j7a6J6e6g6i6k7z6o796;6S7d7e5;7a5q042J150B0.627v6;6E7u3b7k6x6#786:7r016)6|5Z040,7Z7)7b4@6 7S7$6E0C6H6,6!6/4D7T116*7E7$7L7,7|4k7F115z7H7e7a750;7!7}7$7G707I6X6;7L7N0*7P4%7_65047V3m7X5p5d855v7~04807#5}830c7-815}5y7;7W7a6E0L8s6Z8J8F7l7(8K7l8H8U8g8L888N3m6V8k7K8z6$8Y3p8X8V6x1s8#868h887.8n1x8p7Q7.547H8c112J0M0*0q0#8S7*8_8B7?7 8}4M8I8A5)538(3Y0x4G4B4l9s0x4o1z0M4q9x2W2R0y1+9u4o1F9m3R2J0j0H0b0y0m0c0H0W0I111r1t1v1x0A6T4D1M3c1G0s1j152D0A250=0e9-0_0A0^0A0t0D1t0T0W1-2^0D775P0D1-0t260=0B000D2;0#0T0D801N1I040P1j0D0B9`619^0*0A1`0c0yaq1x0M0A0*1j2;0j0$2J0A2C0?1-0#00aw0A0#0h9?002z0D0q4%0c998x3^192D0W180M0c0r11090n0C098)2PaMaO7aaZ20a$a(a*0n090~2s0Ra.3H0O0A9)arawa41i0T5a9r3p1=1Z1#1%9I3^7h9c7m6z7o7R8O8C6G7q5}0R0g6K030I0(6j02bybAbl6s116ubl7Lbn5Obp8w8P668va:7wbw6ebD0u6NbW927c799q4v8D1K9%040Xa69?1-0T9=0w0Y0Aalan5P0AaLaz0AaRaTa%990Ub 1j1}0/a%aF0D250qb`ax9|0y9X0?9=4^bc3Rbe1@1$2k9g047^b$9r3u0-bb4vbd1#cpbhbP048Rcvb(0db3060K0?0Wch1w0A5H0h0=1i9^cb2fb/0=0,0*0r9-9K0h0c0q0=aBaD9Y2G9@7Zb|axcW0c0b0b2K981-a8c04%500#b3b58^cZ1,0Acd7O7Qafb+cN9@2e2Faqcc4u990Rc4a8a(5#d4b^0.b{0$c+1j5H34a3c40:aM1-7Nc91v00az1-4!1,aWa50#a70y9-cZ0Jb/dba0904%9^d0a9dO4$2E0Acid12FcYdacy2J0#0l0wc+0A0h170D1PaUbMdf9Hb50iaVaxam0N0V9KaoaT0Tdn0q0T0h0qdYbc2gc)2=0Db;b{0/dSaO5-ag2*cB1?bgcr5}2p2g2i112v0k0T0q0 ax0v0F205%2}4A5)2|4Dcw957+c{7.5U5a8:5p4X6yd*d31i4)2B4,0h4.b!4@9i6y4}7N5$9be(5x1155948m8.8fbO8CbR3u8-045s8/8?6R9o8j727g11dBbJ5 bMbF5U5Wbt8Z5!e|d4e@9!8*8bfk5V7ibq82fo6Bft8;7tbl7x6ObB7Cfy8a71fbbLfI7=5}7Ufn7{fe8$8W9he 7`841,0qe@89fJ6D11cufXfuf#f69ffYf)ff3 9j7Zf.f*2c8MfSfj7$8d5_f!fV7pf^fK8uf9aX46fN7C6NfQg46}fz3y8kg88GfHgefFf}8uf!9ebi468=f%6xf,c,f/a/fa8CcHgf8yf`7.gF8`gveZg2gKg7gj6^gCcF8EgGgQd8f-f/e_gdbNf|7l93fig!5@960-99e~gPg0gRgp7sb)h17mgIg3f 46g65.1zeX1M4m9v4y139v0-0/0;04.