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

Python Console Session
>>> 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"
(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 : 5/5

.128013g r;)/(lDoU4,6b=ax+5utP7eÀ-h0mnk:Séq.y1cd32!à8ù_wvLpf*O9Ris050P0z0w0r0*0i0+0c0O0i0r0+0+0q010w0*0!010406050+0v0E0E0r0d0M040I0k0i0v0 0k0F0c020r0E0!0e0c0)0z190d0K0v0z0+050g16181a1c140!04051H1A1K0g1H140P0*0Y0@0_0{0}0_0F0b0v0r0b0z0B0!0M0w0C1j0c0C0*0b0C0i1:0C0w12050/0p0i0z1T0`0|011/1;1?1;0w1|1~1`0w0d1I1+0@1f0+0!0r0F0}0R01201V010#0;0z0F1n0z1`2i2k2p222s1~2v0E2x040a0c0x0d0k0!0k0+0*1i1k0-2g0d0d0z0O2S1A2z0F1I0g1+2(2c2e2d1{0P2B1W0*0F2u2P1`1Q1S0^212=2@0F0k2{1`0!2X1I2$2(38152j1k2}2q310d190i1`0r1.2X0#0}030W0W0O320z1?300k0B0N3z120c0N1A0r393c133b2A3e223g3i3k3m0z3o013q3s3u3w2^3z0B2n040c0R3F3H2k3J2$2;013O0r3j1I3l0C3n3p3r3t0-3Y313!0Q3C0Q3*2#3I143.3M0}3;3?053^3`3U3|3X2?3Z3A0m3C0m451B473K3d1U3N0k3h3=3Q3_3S3{3W3~4k403A0u3C0u4q38483c3/4c4A4g3V3}3v4G3y3A0o3C0o4M4s494v4b4x3P3@3R3T4U4j3x3!0y3C0y4%3,4O3L4*3:4,4z4.4B4:4i4F4?3A0U3C0U4{2%4}4u2~504y4d4f4C4h4E4W580B0(3C0(5d3-4P4a5i4-4e4/4D4V3 4Y3z0D120N0D5v5f4Q515k5C5n5E4X3!0N0N5J3E0g3G464|4t5O5j4S5m4;574l3z3$0N3)5!3+2%1L361A2{2+0P2e2:5y4V2`1R1I350z373I5$5_4V692A0*0P0}3r2$5V3Q6g6i5o5F6l0c2F0z6o5T5q5X2(5#4)5h0G120-0#6b3%5(5y0F0#120z0Y3=1!2S0W2O0+0w2s0s0z6H6J4 11040h6!6B3f6N0s670{0*1j6*5x6$120f0H6H144r3,5(6n016j3c3!3$5B71565p5/2n6s2w6v4=7b1`5@0c7k0c6#5h0F120!2t6H7m6+220k120q7t7n6,040x7s6~5_7v0}6%0h0f6|6?6f6h720W6k3A424.786p5U7U2o6t7f5.4H0B7V3*7l7u6@6C120#4x7A7I3:6N1~2G0F0w7@7/2q0k0X122?7 4~7o6-6/2Q6=7G6e5g2q6%6{8d6}3a3.7X7T0B4n7W7Q796q4m7#7e7R6w5/8q7,7-7l7B226D040*6G8d7.877C3v1t2u7~8L8F0}7x040S7z8T7^0+6y02030Q0(0e0t8(8*0e868f7w83042k0P8;4Q7`8Q7}8{5y8W8Y904 8$128.8+0$988:8d8U018h7N9d8m8s7S744I6m9k8z7)4J7d2G7%7a9r7i3G8D9A8M8=4b7q7F8l807w120L7O9D7_041t7r1~0d9M3/7K9U6K8}7|8S9H8N226%7M8j9U8n9m0B4!8r9v8u9/8w9u8y7g7)9:8C9A9e8H3v0+6Z9i9I7J128i4N9,9k8o4^9;9`7(5G4^9t6uag9wai9y3%9B7-a0848K389C8|9P7{8R945h8W0q8Zaw9e96049b8-8)8+9X6^04a94sa57P6o8o5aaf8t7Z0B5aak9=a#aY9~ar8D9e7p042X160i0/9#3Iax917yaC7C9Ra49$9N8W9LaU9Na:0-b09Tb69V127La~9J040tbg9E04b0aPaD9Kbo7Cb92tbbb2bd6(9*aabc9-2k3!5saZ7Y5q5sa(am9?bFa,arataza3br9(a89hbwbC0F5V5IbG9q5G5K9^ala!6xb#bOa-7ka/12a=0va@0ra_3,a{4 aEbk9Obnbca|04b5bw9Y04bt9SbTa7byc08W0$c0a:c2c7b~bqc34 b80zbacc9fbebzaTbXac9.5W9oa)6x5XbKb,5/cB6zaqb:b=bm9G6a7^b4cta:9Qbuct9Wco88a;1yb^a^cX6_bWcQ4PbY5V763l7Xb%c/b*cDcI767j8E7^8H2X0w0v0d0Fci9F1~ctcScZbscrcWdabUce9+9d0g6d5`685|651A0w5 dp2.2)0r1}dm0g5}1G8e3/2X0E0W0#0r0G0z0W0C7V1s1u1w1y0caS6 1N3J0-0/0;0?6K0k0w1 0P0J0!1?0J2x0c2N2u8V0!2u1248171u1c0Z3ld(1u0O0Cb1d_1E3J1H0%1k162R0c2j0?0Teb0`0c0_0cd~1ae01 350Ja37}d,ej2k0?0i000J310F0O0Jb51O1J040l1k0J0i0J9!ej0v0c290z0reO1y0w0c0v1k310E0p2X0c2Q0@1 0F00eU6s0*eh002N0J0db`0zd2b}5h1a2R0C19d$0s12090h0t09cwb|0Fe/9ee}1+f00zf204f4090 2G0+f76H0L0ce7ePeUd%1j0O7m6d8J0c8PeM8Y0c000t000c8_fBaA7}0cfE000$008i6deDe5040jeueh1 0Oeg0k0V0ceJeL8RfB6VeW1ke=e@d$d20nd.1k2c0:d$e%d)1af,fNe00rdP0@eg6)6dbjdj3u3%0.fygdchgc0-040ffq060A0@0Cg51x0c7=0*0?1-d(b0f!0?0-0v0sebdD0*0z0d0?eZe#dQ2UeigAgf1-3S0#2Yd11 ewf=b`6;0FfqfscV1~f!0c0depc%b`fVdAgpei2s2TeO2j0d3td20+f_ewfg8ag$f*0/fN0pgI1k7=3hd,f_0;6s1 a=f~1w00eX1 6P1~e`0PfZgQ2tdRg,g.a?a^ejgYexhp6Rh5g6gZ2Td)hvgf2X0F0Y0kgI0c0*180J1Qe^9!g=5|0.0:0=3Jdyh#dY04.