Aller au contenu

Analyser une expression arithmétique afin d'en extraire les « jetons »⚓︎

Dans un terminal Python il est possible de saisir des expressions arithmétiques, des « calculs », afin de les exécuter.

Python Console Session
>>> 2 +3* 4.5
15.5

Cette opération a l'air anodine, mais elle n'est pas si immédiate à effectuer pour Python.

L'une des étapes indispensables est d'analyser l'expression 2 +3* 4.5 afin d'en extraire les différents jetons (les anglo-saxons parlent de tokens comme dans cette page) : 2, +, 3, * et 4.5. Le but de cet exercice est d'effectuer cette analyse.

Remarque

On ne va pas procéder exactement comme Python mais l'idée générale reste la même.

On se donne donc des expressions arithmétiques, chaines de caractères Python, composées de :

  • nombres entiers ou décimaux (le séparateur décimal est le point '.') ;
  • de symboles d'opérations : '+', '-', '*' et '/' ;
  • de parenthèses '(' et ')' ;
  • d'espaces ' ' placées entre les jetons, mais pas toujours (voir remarque ci-dessous).

Remarque

On considère que les expressions arithmétiques proposées sont bien formées et correspondent donc à des calculs valides.

Par contre, les différents jetons (nombres et symboles) peuvent être séparés par zéro, un ou plusieurs espaces.

On demande d'écrire la fonction analyse qui prend en argument une telle expression et renvoie la liste des jetons, chacun étant une chaine de caractères. Les espaces seront ignorées.

Exemples
>>> analyse("35.896 ")
["35.896"]
>>> analyse("3*   5+8")
["3", "*", "5", "+", "8"]
>>> analyse("3.9  * (5+8.6)")
["3.9", "*", "(", "5", "+", "8.6", ")"]
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
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="I_e+y3qCRduéBxUEgPvr08-MèDê*fLbco/HmY]h(apl),?7ç['n sS:|j6w% 1.ikF!9\Ot25;4A030g090=0L0+0N0X0W0C0N0L0X0X05060=0+0M06020(030X0h0G0G0L0q0b020Y0D0N0h1b0D0V0W000L0G0M0^0W0f091l0q0d0h090X030E1i1k1m1o1g0M02031T1M1W0E1T1g0g0+0p13151719150V0n0h0L0n090t0M0b0=0J1v0W0J0+0n0J0N1~0J0=1e030~0B0N091(1618061}1 211 0=2729250=0q1U1_131r0X0M0L0V190?062b1*060z10090V1z09252t2v2A2d2D292G0G2I02040W0o0q0D0M0D0X0+1u1w0|2r0q0q090C2%1M2K0V1U0E1_2=2n2p2o260g2M1+0+0V2F2!251$1'142c2 310V0D35250M2+1U2:2=3i1h2u1w372B3b0q1l0N250L1|2+0z190108080C3c09213a0D0t0?0t0)1e0W0)1M0L3j3m1f3l2L3o2d3q3s3u3w093y063A3C3E3G323J3J3N0?3Q3S2v3U2:2~063Z0L3t1U3v0J3x3z3B3D0|3,3b3.0c3N0c3=2/3T1g3_3X193|3~0340423(443+303-3K0_3N0_4d1N4f3V3n1)3Y0D3r3}3#413%433*464s483K0@3N0@4y3i4g3m3`4k4I4o3)453F4O3I3K0$3N0$4U4A4h4D4j4F3!3 3$3'4$4r3H3.0R3N0R4.3@4W3W4;3{4?4H4^4J4`4q4N4}3K0s3N0s522;544C38574G4l4n4K4p4M4'5f0t0/3N0/5k3^4X4i5p4@4m4_4L4%474)3L0r1e0)0r5C5m4Y585r5J5u5L4(3.0)3M025%5T4B5V5q4!5t4{5e4t3L2y5(3;0E3R4e535+5F4Z5a4#5d5w5=0)4a5(4c5`3?5l5~56605I5b5K4|654v5(4x6a5|6c4:5o6f5s5c5v5M5$4R5(4T6o4z5}6r3p5W5.6v5!5x0)4+5(4-6C4V6d6s6H615/636x3K0)4 5(516Q3T1X3g1M352^0g2p2}5F4%341%1U3f093h6(6D2;034%6{2L0+0g193B2:5$3#73756w5#6Z2z2Q097b6K65256o6F3Y1e0Y0H0u0j0;0A0m0Y6p020W6S2B0D1e057y7A7n190X5@001I0D0=0^0a0t0y0E0K0O7M0h7O0^7y1g6}711w7a06763m3.5@5I7)6X7d3/0W7g7i6j4P3/2=3R7$3k3_7:08773K677/747*7c5x4a7@2H7_5;7{866a7 6(81887+2v3.6l878f647{4v8d2R8t6Y0t8r7m5E560,1e0|0z7G7B3Y0z1e2v3}0b0X097y8L191d020K8U7I3{1e090k6_170+1v8!8E5o8X0O0Z7#8-728n837,4Q798_7j7{4R8x7h898 5N6z3=0W997H8.3p8%292R0V0=1L7%9b555o7D027F9k8V068X0T0I8?7%5+82840t6N8s947`5N4+928z7=9D6a9a9l5n9d020=1F0M8K8#9o9q3i9P3`9u9w7%8k3@9z8_9B6#9E7;5x4 9J9F8g5N9.9N9a9s8G020z4F9W9c7o020C1m0L2-092+a29m7C0%1e30ac9Qa48'8)2#8,9y8#8X8=9(8@7(9,8{0t5h4^82953.5h9?9:5=az989O9|8#9~0+8J9r8#0V1ea60qa89TabaQa3190Daf02ahaZada47q7s7u7wau9$1eas6Rap4X9Aax5zaA8~9G3.5zaF8a5=a|aJaKaK9}agaP9!9s0V0B1e2Pa:5F8X8Za^a*4j1e9T1Abi568:ai3`9o000n7Pbv5F0G0+1e5Sbmaj8Wa=9x80a_aw8p6Z5Pa}9K6L5Pb2aCbQ7l3Rb7b#aLa!8$023F1F2F9ibs9n1e0*b.9R0L0M0M2F0gb=2dbkb|7J7L7N7P7X7Zb 069ob;bH4Y1e0#0Da(bMbn9t1eblcgbIb(bq9Vcabj1e0O0ObL8lbN7b9B5%8}bT653MbWa 6Z5'b6b$9#5 9eb+9h9jclbwb:c6aS02b@b_0Vb{cqbtcjcUaTa7a9aYcRcr02cuatcaa`bP5?cB9@8u5N0)2ycF9^5$7.9{cKcL6ebp9UbB569Yd88/1e9vcv9*8mcyax66c^aG7{dkc~c`5$8ib!b#b9b)21bb3Td46sc(aVc*8Ta)cm9o0.9Zdz9s7K1ec47P1xc27!c#dc02a?4Ac;bO0V5$8r3vaBcG3L8w7^c_8A0)8Cdtd3bdd6brdU7CcTd_a4cXb`c6b~d|boa5c)aXdFc,c$c.df6~dh89cz97d'a~c 6Z91d,dmc{97d2dA2BaNdy3@er3Ybf02bhe2ci8Yc'9Sd7eBbudGcS02bybAeJbCbE02bGe8dVdX5}dZdic?6Mdlb3dn9Ieme$c{9Md;b8aRcN9gb-eBc8eEd~cZe0c%eBdNeLdSdPdTeTd`02c9f2a4cdcfcwche1f6e3coe`c.c/a@cRc=d#6Z9.ehcCdn9=e(bX3L9`e,dv2+0=0h0q0Vdb9Rb*e:cQdY3k0E706)6`6+6@1M0=6.fR2{2?0L28fO0E6,1S7'3`2+0G080z0L0,09080J671E1G1I1K0WeV6~1Z3U1T0A0U3}0n4F2$0J2R0W1K0=2M0+f@g7g9310W3f0i8S9h2a2u122(1$0z2D0C0h0N0=gi0W1l0#09fB1K0*0W0;1w290Wfz2X0h0p2a2(f+0S1{2n0v123f0D0C0JgN2v12gHa60Ngs0N0W0|12aX2Rgn2a150W1i2$2a0L0h1$3IaW1%gN2a0e1v0%0L0bgdg*g!0Wg;3D1A2+8*1{031F020f0hd#0A2Fbz0J0W0m0V45300n1Mhhc91!1V0207g)g80Wg_8*gg2!2#fYg*2a0qgi0Dg`2+h90U8'aa0C0+0C2a2F0W1t100+0X2vg9hk2a0p1m0+fXgHco4F0 hS0g0h0W0=0bb_130J0 gf2(aUaW0vhdgD0`0N4F0X0PhFh{21gAhM0Wf+0+hS6 3EeF1A0*e^0g0Ki5dEc/70ie1{ilg92#1A9fb,7A70co0W0a0513e5aadF70gD0w2a0G0xg60N0U300X2n0h2-8+1wio0|02gz0=1v0Xisb^b`0K06060*f80V0Kcoct1M70hM0p0+iHi+6`i.i:i=cYiui j1iphyf}02hr2D0Vie29126g4o230=0M0X0Z0E0E0z0q0*0%0+0,1c091$0L0*4F0n0EjCjE0E0m8(hdan0V080q0'0e0c0'0`0/1.21jXjZ0`0s2+8%jR1KjT12hOj%0+i71K98b_3r0}9T9hijhO0XhQ0ghSaV0M73cOg9hZgg2X280v2RgD0lgfaljSi)gI0ij?j^g7i$h$gfgXi2g iOdD0=j^gn0i0C0q1%h*g*g01thdi0kwg/kyi6i82V1mg70k9UgHj7a5i10=0K1v0O0Q0X0Qjfi,g*gi1~gfjogx7Ojp70kv0=k+6`iekYk_aoiziIipk_9jj20}l2i,k 0Vl5jg1XjigFh$1b218ShFib0qg#hUj.he1wj=gtj@in700:0g0a0K0Q0Z0:0*ly0ak'0!0T0a0:7S0:7U0O9'iS0WhCkrg92Z8*hL2(9Ti$aa13j}h!lqjTknkphS1i0qh92a2#9Tijjq5tjsjujw0E2+1;0k5R0)0*hbl~0E0/0b0F0-0c0p0E5'l 8'm23=jhf$hm2r2(0o1^1`2'09j4iH3}icf_le1#1%3`1,1.1:1=1@1_1{2f202224f%5F2O2F2H1empmIfD9y6_7'6b1UfMed8od#0c3Le#aCm)cEfta m-2z6h5Zm:m*7}mO8FcV0+1A4Fk`eO6ecVc+fJfaaveYm(7|9/e)0tm)c}m/c nfm=62ndnjm`dv8IfE8M8O2G0N8Re7n7a;eDeBcVkkj/i)fg8;ebf%flnenem+m^8cnhdqm)8cm?5:nRnMm`9Ofy0}fBmWbce.02n5dgb'e?nB1ejl0g3}0Nfgckny5Fe}f0lGlBlDlFlzlIlKlM0ylO7V0If0fg0Pnre3nDlrnGnIk{2=mYfP0p3Uf!0}0 1102.
Conseil (1)

On pourra utiliser une variable temporaire afin de stocker les différents caractères composant un nombre.

Conseil (2)

Avant d'ajouter un symbole (opérateur ou parenthèse), on vérifiera que la variable temporaire est non vide. Si c'est le cas, on pourra ajouter un nombre et le symbole à la liste des jetons.

Conseil (3)

Un nombre n'est ni un symbole (opérateur ou parenthèse), ni une espace.