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

.128013Ăą_4:L2!-.Sw3/+7Ă€bpPiqo1tl(9 ;=vm6u8Rs*frOgĂ eUhcDĂ©05a,nkydx)050)0S0y0!0u0z0L0C0V0z0!0L0L0E010y0u0s010406050L0I0G0G0!0O0(040k0w0z0I0 0w0$0C020!0G0s0D0C0K0S190O0v0I0S0L050n16181a1c140s04051H1A1K0n1H140)0u0F0@0_0{0}0_0$0Q0I0!0Q0S0i0s0(0y0U1j0C0U0u0Q0U0z1:0U0y12050/0r0z0S1T0`0|011/1;1?1;0y1|1~1`0y0O1I1+0@1f0L0s0!0$0}0g01201V010N0;0S0$1n0S1`2i2k2p222s1~2v0G2x040a0C0t0O0w0s0w0L0u1i1k0-2g0O0O0S0V2S1A2z0$1I0n1+2(2c2e2d1{0)2B1W0u0$2u2P1`1Q1S0^212=2@0$0w2{1`0s2X1I2$2(38152j1k2}2q310O190z1`0!1.2X0N0}030c0c0V320S1?300w0i0x3z120C0x1A0!393c133b2A3e223g3i3k3m0S3o013q3s3u3w2^3z0i2n040C0g3F3H2k3J2$2;013O0!3j1I3l0U3n3p3r3t0-3Y313!0m3C0m3*2#3I143.3M0}3;3?053^3`3U3|3X2?3Z3A0d3C0d451B473K3d1U3N0w3h3=3Q3_3S3{3W3~4k403A0Z3C0Z4q38483c3/4c4A4g3V3}3v4G3y3A0H3C0H4M4s494v4b4x3P3@3R3T4U4j3x3!0p3C0p4%3,4O3L4*3:4,4z4.4B4:4i4F4?3A0J3C0J4{2%4}4u2~504y4d4f4C4h4E4W580i0B3C0B5d3-4P4a5i4-4e4/4D4V3 4Y3z0Y120x0Y5v5f4Q515k5C5n5E4X3!0x0x5J3E0n3G464|4t5O5j4S5m4;574l3z3$0x3)5!3+2%1L361A2{2+0)2e2:5y4V2`1R1I350S373I5$5_4V692A0u0)0}3r2$5V3Q6g6i5o5F6l0C2F0S6o5T5q5X2(5#4)5h0%120-0N6b6e5g2q0l3C6H5(5y0$0N120S0F3=1!2S0c2O0L0y2s0*0S6N6B2q11040A6)5x4 0$6S0*670{0u1j6/4~5h6,0+0e6H144r3,5(6n016j3c3!3$5B77565p5/2n6s2w6v4=7h1`5@0C7q0C6O6;120s2t6H7s6*220w120E7y7t5h6=040t7x745_7A0}6,0A0+726|1k7e0c6k3A424.7W6w5/427j2G7l5.4H0i7!3*7r7z6:6C120N4x7F7O3:6S1~2G0$0y7|7@2q0w6L042?846}3f6?6^2Q6{7M6I3/6,718i733a3.7W7Y0i4n7#6h786p5U4m2o6t7,7g7.8u7;7=7r7G2q6D896G8i7?8c3N7 1t2u838P8K7B120h7E8X7}0L6y02030m0B0D0o8+8-0D8b6J7B882k0)8@4Q8T818W388Q8^0}7C048#8}5y8)128;8.0M9d8?8i8Y7P128m4N7U0C8r7a4I6m8w7f6q9s7*6u8x7%7.4J6z3%8I9G9j7~047w1~9o5y960j9N7u041t9L0S0O9R6~126.9i7}7I3v8U829Y6+127S8n9o9q2k3!4!8v8D9w0i4!9y9`8z9|7o3G9G7q9I8M3v0L6(9$85228l7Tab6f9u7X9r0i4^9_9A7m7.4^9~ao7-5Gam8Ha48J7}8M0u8O929I9(808V994 960E8$aE8(8*8,8.8:aR9h8pac9k049m4sag7Vai8s5aan9va05aasa,5qa*axay8IaF122X160z0/913I933/aLaJ7H7v7LaW8R95129Qa$8~040-9V9Xbd5y7Q9/aOaX01960ob48d9Kb76a7}9P9,8Sbf0SbhbzaY7Rafb8a%6o8s5sa+8y5q5sa/bO5/bMa?aya67 a9bE01ae9:bd9=0$5V5IbN9B5G5K8B7kat8Eb/b,bVa@a59%a`1y0Ia}0!a 3,b19O7DbsbA9Vb!bybj9Sbg2tbibI8k9!bmb09I960Mc84bb69Mcd5hccci6P6EbCcgb!blbHbw4Pb)5V6y7daib.cIb;7+b?9{5Wa29Fb{a_buctcxaKbbb!9(1ocBcu9-6-c$b~a|a~cC9.cE758qa(ak5=9t9 6x7i8CcQa0c{9E7=bX042X0y0I0O0$cq9Jcac*8Z04bccZb5bBbDdgbFcl5%9i0n6d5`685|651A0y5 dz2.2)0!1}dw0n5}1G8j5y2X0G0c0N0!0%0S0c0U7!1s1u1w1y0Ca!751N3J0-0/0;0?6P0w0y1 0)0X0s1?0X2x0C2N2u950s2u1248171u1c0f3ld=1u0V0Uaa1Ce43J1H0P1k162R0C2j0?0Rel0`0C0_0Ce81aea1 350Xa982d_et2k0?0z000X310$0V0Xbc1O1J040T1k0X0z0X90et0I0C290S0!eY1y0y0C0I1k310G0r2X0C2Q0@1 0$00e(6s0uer002N0X0Oc20Sdac54 1a2R0U19d:0*12090A0o09dq2%e{f55hf71+fa0Sfc04fe090 2G0Lfh6H0j0CeheZe(d;1j0V7s6daC0C9)eW8#0C000o000C8{fLaH820CfO000M008m6deNef040WeEer1 0Veq0w0b0CeTeV8VfL6!e*1ke f1d:da0#d{1k2c0:d:e;d?1af_fXea0!dZ0@eq6.6dbrdt3u3%0.fIgncpgm0-040+fA060q0@0Ugf1x0C7`0u0?1-d=9Vf.0?0-0I0*eldN0u9W0?e-e/d!2UesgKgp1-3S0N2Yd91 eGf c26`0$fAfC9U2tf.0C0Oezc0a~f)dKgzes2s2TeY2j0O3tda0Lg3eGfq8fg/f@0/fX0rgS1k7`3hd_g30;6s1 a{g81w00e+1 6U1~f40)f-gZg@0eg^g`c/c2etg+eHhy6Wheggg,2Td?g@gp2X0$0F0wgS9p180X1Qf290g~5|0.0:0=3JdIh-d,04.