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

.1280136f(9*7Ool5.Us3rLDua;2é84_+àewn-ù1= :dckiyP,/hbRtqS!mg0)Àxvp050L0C0W0t0O0j0n0J0M0j0t0n0n0I010W0O0+010406050n0s0!0!0t0p0P040Y0i0j0s0 0i0E0J020t0!0+0u0J0V0C190p0X0s0C0n050S16181a1c140+04051H1A1K0S1H140L0O0*0@0_0{0}0_0E0#0s0t0#0C0F0+0P0W0T1j0J0T0O0#0T0j1:0T0W12050/0U0j0C1T0`0|011/1;1?1;0W1|1~1`0W0p1I1+0@1f0n0+0t0E0}0v01201V010c0;0C0E1n0C1`2i2k2p222s1~2v0!2x040a0J0Q0p0i0+0i0n0O1i1k0-2g0p0p0C0M2S1A2z0E1I0S1+2(2c2e2d1{0L2B1W0O0E2u2P1`1Q1S0^212=2@0E0i2{1`0+2X1I2$2(38152j1k2}2q310p190j1`0t1.2X0c0}030z0z0M320C1?300i0F0H3z120J0H1A0t393c133b2A3e223g3i3k3m0C3o013q3s3u3w2^3z0F2n040J0v3F3H2k3J2$2;013O0t3j1I3l0T3n3p3r3t0-3Y313!0o3C0o3*2#3I143.3M0}3;3?053^3`3U3|3X2?3Z3A0y3C0y451B473K3d1U3N0i3h3=3Q3_3S3{3W3~4k403A0k3C0k4q38483c3/4c4A4g3V3}3v4G3y3A0b3C0b4M4s494v4b4x3P3@3R3T4U4j3x3!0g3C0g4%3,4O3L4*3:4,4z4.4B4:4i4F4?3A0x3C0x4{2%4}4u2~504y4d4f4C4h4E4W580F0e3C0e5d3-4P4a5i4-4e4/4D4V3 4Y3z0$120H0$5v5f4Q515k5C5n5E4X3!0H0H5J3E0S3G464|4t5O5j4S5m4;574l3z3$0H3)5!3+2%1L361A2{2+0L2e2:5y4V2`1R1I350C373I5$5_4V692A0O0L0}3r2$5V3Q6g6i5o5F6l0J2F0C6o5T5q5X2(5#4)5h0N120-0c6b6e5g2q0D3C6H5(5y0E0c120C0*3=1!2S0z2O0n0W2s0)0C6N6B2q11040d6)5x4 0E6S0)670{0O1j6/4~5h6,0%0K6H144r3,5(6n016j3c3!3$5B77565p5/2n6s2w6v4=7h1`5@0J7q0J6O6;120+2t6H7s6*220i120I7y7t5h6=040Q7x745_7A0}6,0d0%726|1k7e0z6k3A424.7W6w5/427j2G7l5.4H0F7!3*7r7z6:6C120c4x7F7O3:6S1~2G0E0W7|7@2q0i6L042?846}3f6?6^2Q6{7M6I3/6,718i733a3.7W7Y0F4n7#6h786p5U4m2o6t7,7g7.8u7;7=7r7G2q6D896G8i7?8c3N7 1t2u838P8K7B120Z7E8X7}0n6y000A008b6J7B882k0L8.4Q8T818W388Q8/0}7C048#8@5y8)12000f8-8i8Y7P128m4N7U0J8r7a4I6m8w7f6q9k7*6u8x7%7.4J6z3%8I9y9b7~047w1~9g5y900l9F7u041t9D0C0p9J6~126.9a7}7I3v8U829Q6+127S8n9g9i2k3!4!8v8D9o0F4!9q9/8z9;7o3G9y7q9A8M3v0n6(9U85228l7Ta36f9m7X9j0F4^9.9s7m7.4^9?ag7-5Gae8H9|8J7}8M0O8O8|9A9W808V934 900I8$aw8(8*8,9!a59da78p4P9*0E3!5aaf9n9^5aakaV5qaTapaq8Iax122X160j0/8{3I8}3/aDaB7H7v7LaO8R8 129Ia88~9B0-9N9Pb08k9S9%aGa4a}040Aa@8d9Ca`6a7}9HaK4b6E0Cb4bm017Qb94sb6aQ3!5saU8y5q5saYbB5/bza$aq9~7 a1bra69(bwaa8s5K9l9@6x5IbE9t5GbT9wa%9|a)04a+0sa-0ta/3,a;9G7Dbf8Sbh9Eb6b=04a a{b17Ib32tb5b b76-bub:9A900fb@bnb_a2c5b|b~bjbbb2bpc3bNb8aNcka96obS6y7daabZ5V5XbYahb!cw7pb%b;9K9Nbrblb{9K9McocN9R6-br7Ib+b-b/7Ncl6 cr758qbRac5=bUal8Eb!7i8Cc-9:c+b$arcl8M2X0W0s0p0Ecd9BcKcR86a~cUbobqd4aLc7c$5_0S6d5`685|651A0W5 dl2.2)0t1}di0S5}1G8j5y2X0!0z0c0t0N0C0z0T7!1s1u1w1y0J9e6a1N3J0-0/0;0?6P0i0W1 0L0w0+1?0w2x0J2N2u8 0+2u1248171u1c0q3ld!1u0M0Tcgd=1E3J1H0h1k162R0J2j0?0Be70`0J0_0Jd`1ad|1 350wa182d(ef2k0?0j000w310E0M0wa 1O1J040m1k0w0j0w8`ef0s0J290C0teK1y0W0J0s1k310!0U2X0J2Q0@1 0E00eQ6s0Oed002N0w0pb.0Cc~cI5h1a2R0T19dY0)12090d0A09c82%e*e@2qe_1+e|0Ce~04f0090 2G0nf36H0l0Je3eLeQdZ1j0M7s6dau0J9XeI8#0J8+000J8=fxaz820JfA97008m6deze1040reqed1 0Mec0i0G0JeFeH8Vfx6!eS1ke.e:dYc~0Rd*1k2c0:dYeZd#1af$fId|0tdL0@ec6.6dbedf3u3%0.fug7ccg60-040%fm060(0@0Tf 1x0J7`0O0?1-d!9NfU0?0-0s0)e7dz0O9O0?eVeXdM2Ueegug91-3S0c2Yc}1 esf,b.6`0EfmfocP1~fU0J0pelb,a.fPdwgjee2s2TeK2j0p3tc~0nf:esfc8fgVf!0/fI0UgC1k7`3hd(f:0;6s1 a+f^1w00eT1 6U1~e?0LfTgJ2tdNg#g%a,a.efgRethi6Wg~g0gS2Td#hog92X0E0*0igC9h180w1Qe;8`g+5|0.0:0=3JduhTdU04.