Aller au contenu

Évaluation d'une expression postfixe⚓︎

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 arithmétique 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'expression arithmétique.

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 a du sens (\(3 \times 2\) a du sens, pas \(3\;+\;\times\)).

Pour cet exercice, on dispose d'une classe Pile qui implémente les méthodes de base sur la structure de pile.

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

🐍 Console Python
>>> 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 à 4 * 3 * 2
24
Question

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Ctrl+Clic pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
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 : 5/5

.128013y1/wi_qP+r 79Àf;gR2Oh)(àpnD0ld,*4LkéUe!bmc:35a=o.8t6sSùuxv050E0M0Z0U0f0D0#0l0Q0D0U0#0#0V010Z0f0z010406050#0(0P0P0U0k0b040$0W0D0(0~0W0A0l020U0P0z0q0l0s0M180k0h0(0M0#050d1517191b130z04051G1z1J0d1G130E0f0*0?0^0`0|0v0f0r0v0D1X0v0Z11050.0O0D0M1S0_0{011W1Y1!1Y0Z1*1,1(0Z0k1H0Z0v0?1e0#0z0U0A0|0t011.1U010p0:0M0A1m0M1(24262b1:2e1,2h0P2j040a0l0i0k0W0z0W0#0f1h1j0,220k0k0M0Q2E1z2l0A1H0d202Q1}1 1~1)0E2n0|1!0A2g2B1(1P1R0@1/2!0f2$0A0W2*1(0z2J1H2O2Q2{14251j2,2c2;0k180D110l0c2N2 122~2m311:3335370t3a263c2O2Z013h0U36040l0S3l2P133o3f0|3r3t0l0H3x3n2 3p3D370T3H3z3J3B3q0W343s370!3O3d301T3g3T3i3u0m3Y3A3#3C3%3V3u0Y3+3Q3-3S3U3E0n3?3e3^3L040c0C3}3!2-3_3(0c391A3b3P3~46400c3k4b3m1K2_1z2*2T0E1 2Y3R0Q2=2t0+1Q1H2^0M2`3b3H054u0,4C4e2c0J110,0p3H0l3Z3K0p110M0*3s0(0U2E0g2A0#0Z2e0)0M4E3,4610040x4,3@4f4U0)4A0`0f1i4=4J1:4/0w0R3O0l554Q4-32110z2f4P4R3R0W110V5d583g110i5c4j2P5e3^4/0x0w54565r464L040p3T5j4?59040M1,2s0A0Z5E4 0|0W0e112/5N455G0M4_2J4{4}5p4I5V5011535$06565.575F1:5A0f4O5$5:5O3q4U5J2g5M5_5y2c5g040N5i615k0|0#0c1102030S0n0q0j6e6g0q5U3p5Q11260E6n3R0A5}1s5 6t3^64666z466b6d6f6h0G6k6h4~5(0|4/5+2{5-5/6T625l045b1,6M6o110X6!6u4U1n2f0k6(5s114;5$6V3C6w5K602}6901515w6U6|5A5I0#4+6=6|6P6 6T5x715S5^2{5`6N5|5H5~5L6D635h677f6?016F046K6i7v6.4.5*797a5/7r6v045Z0(0D0.6`3b7g6#047p7M7E5a5o6{5;5P6$7y5G0,6Y0M6-767W6}6:5v687*640j7m6W7$7Z1:646%7)5{7F7#6,7^6O7,7B7a7r720;757V5{785,7C7C7S7G1x7I7K7=7X7P8l7i7@7|7h7`817i7 1,7(8a7h5t7-7q6|640G8o7F8q8z7O7{8K6)048w7%8u8B84707*8I7U4D8E7Y8r3K6*7$8y8Z7*5t8u7F7H7J4Z8S118C4c5.86112J0Z0(0k0A8H7T6Z8$5f8#8N3 4M0M8)8?4:8^3m130d4G4B4l9k0d4o1z0Z4q9p2W2R0U1+9m4o1F5%3p2J0P0g0p0U0J0M0g0v0S111r1t1v1x0l6Q4D1M3c0,0.0:0=6u0W0Z1-0E0K0z1!0K2j0l2z2g5P0z2g113z161t1b0I0U0l9(1t0Q0v899_1D3c1G0u1j152D0l250=0yac0_0l0^9~0Ka0a2ac0k0K745L9,9~260=0D000K2;0A0Q0K7{1N1I040L1j0K0Dal5 9~0(0l1`0M0UaP1x0Z0l0(1j2;0P0O2J0l2C0?1-0A00aV0l0A0fai002z0K0k4Z0M8 7N3R192D0v189$0)11090x0j099f2Pa/a;7ra 20b25Xb50x090~2s0#b93H0X0la8aQaV9%1i0Q4Q9j045@0l5I6x5L0l660l000j000l6rbD7kaWbI000G005+bAaEa6040Bavai1-0Qah0W0%0laKaMbGa.aY9.0za^a`8 0F9.1j1}0/9$a(9)19b/aWa10U9P0?ah4;bA7;9i4v3u0-bzcf8Gce4H0wbr060o0?0vc71w0l5C0f0=1iak7$b%0=0,0(0)ao1s0f7%0=a!a$9Q2GajcBchcz0M0p0p2K8~1-axa@a_2Ebrbt1scB1,0lap158;0ZbY9zcqaj2e2FaP250k4u8 0#b{ax5X4`2Ccz0K0.bG0OcJ1j5C349,b{0:a/1-5Zc01v00aY1-4W1,a|0Eb$cQ2f9Rb%c-aq8j4Z9~cZaydq4Y2E0lc8c!2F9)dwch2J0A0*0WcJ0l0f170K1Pa`6_c=4n0-0/0;3c9nd(9Y04.