Chiffres romains (1)

Le but de cet exercice est d’écrire une fonction récursive traduire_romain qui prend en paramètre une chaîne de caractères, non vide, représentant un nombre écrit en chiffres romains et qui renvoie son écriture décimale.

Les chiffres romains considérés sont : I, V, X, L, C, D et M. Ils représentent respectivement les nombres 1, 5, 10, 50, 100, 500, et 1000 en base dix.

On dispose d’un dictionnaire romains dont les clés sont les caractères apparaissant dans l’écriture en chiffres romains et les valeurs sont les nombres entiers associés en écriture décimale :

romains = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}

Le code de la fonction traduire_romain fournie repose sur le principe suivant :

  • la valeur d’un caractère est ajoutĂ©e Ă  la valeur du reste de la chaĂ®ne si ce caractère a une valeur supĂ©rieure (ou Ă©gale) Ă  celle du caractère qui le suit ;

  • la valeur d’un caractère est retranchĂ©e Ă  la valeur du reste de la chaĂ®ne si ce caractère a une valeur strictement infĂ©rieure Ă  celle du caractère qui le suit.

Ainsi, XIV correspond au nombre 10 + 5 - 1 puisque :

  • la valeur de X (10) est supĂ©rieure Ă  celle de I (1), on ajoute donc 10 Ă  la valeur du reste de la chaĂ®ne, c’est-Ă -dire IV ;

  • la valeur de I (1) est strictement infĂ©rieure Ă  celle de V (5), on soustrait donc 1 Ă  la valeur du reste de la chaĂ®ne, c’est-Ă -dire V.

Compléter le code fourni dans l'IDE et le tester

###(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

.8217.1280137w4h)1(+5-_s3u:/S[ bn=éve08imtP]R69p2drg;ylckfao050N0A0F0W0D0S0n0u0T0S0W0n0n0x010F0D0L010406050n0p0E0E0W0O0R040s0X0S0p0=0X0w050r0|0~10120`0L04051i1b1l0r1i0`0N0D0z0*0,0.0:0,0w0P0p0W0P0A0l0L0R0F0f190u0f0D0P0f0S1N0f0F0^050#0v0S0A1u0-0/011M1O1Q1O0F1W1Y1U0F0O1j1I0*150n0L0W0w0:0M011!1w010V0%0A0w0W0E0A1U1_1{201$231Y26280^0b0u0G0O0X0L0X0n0D180w0u0Z1@0O0O0A0T2t1b2b0w1j0r1I2G1:1=1;1V0N2d1x0D0w252q1U1r1t0+1#2Q2S0w0X2W1U0L2z1j2E2G2-0{1`2u2Y212$0O0 0S1U0W1L2z0V0:030m0m0T2%0A1Q2#0X0l0B0l0h0^0h1b0W2.2;0_2:2c2?1$2^2`2|2~0A3001323436382T3b0l1~040M3h3j1{3l2E2P013q0W2{1j2}0f2 3133350Z3A2$3C0o0^0o3H2D3k0`3L3o0:3O3Q053S3U3w3W3z2R3B3c0e0^0e3)1c3+3m2=1v3p0X2_3P3s3T3u3V3y3Y3{3!3c0k0^0k412-3,2;3M3:4b3@3x3X374h3a3c0J0^0J4n433-463/483r3R3t3v4v3`393C0c0^0c4E3J4p3n4H3N4J4a4L4c4N3_4g4Q3c0C0^0C4V2F4X452Z4!493;3?4d3^4f4x4,0l0K0^0K4;2G2*0A2G2W2J0N1=2O3.014w2V1s1j582,3k3*3J054w5n2c0D0N0:332E3C3e4L5v5x4 3Z4z3d1 2h0A5E4w5G5A1U0r3i443M0U0^0Z0V5p2F5T5g0d0^0u5Z5t4@2@0V0^1:0W0N0p0D2z0m2n0 2R5*5#4Z0@040i5}4G4^0w0^2$0E0v2z634q5g600g0q5*0`425q3L5D015y2;3C3E3=0u6n4*503|3D5J275L6o5F4y6r5Q5S64215%040u6N5)6k5!6J1$0n0N0^016X0u0I250z0X0D1Z0S0a0y0T0O2s0p2z2v6,0D2`1Z5=0u686a6_190w0y0u250*1M0V0V2z0n6i6c5u5w6D5z3c3$5C7d6w5O7g6A285M4P6y7h3)6S0:6U5(6O5`0$0w0)6X017a6Q5+6u7j0m7f0l3~7i7p4+6y3~6{6B7P6x4i7M6H6M6O5~4^5V040D5Y7G5)7u3N0v0^2g7b5,1$60627G7$2@670X696b7{7.6f5*7-6d4Z0X0^0x0x857|1$0E0D3f7?3M606h7G6j2/6m7J7L4k7O6D5N6F4j7n6C7k8x0l8t3H6O8G864Y7%0^2z0F6:1a7,8e3/8L7 7A7982874^600t8j5g66046|818p8Y21600H7F8,7c5E7L4B8u8B514B7T7o8v7q7X8_8F7#7.7(4x7+2-8I7@8S047z2R8W8=9c018!8$4Z8(8*0A9m8Z0^8#8X8J218g0^0B9r8.0^0H8:8Q7.8904020P0F0Q8c9G8-3p8T5{7B9B7^9t9V9d9p9Y9k9X9v9j9y043g9(8k9D0H8m4o8j6v7K6q3c4S8`6E514S8~8A9}6y9{948H9b5U8L0!8O8d7.8(9f9U9-6e9%9i4r7~809qah5 aj5o7.9*9Aap9s049Eac9Q0:9I0jaA9w9R045:5=5@0A5_8U5|aw9C619#9o7 6}9#9laQ8f8h9+aX0^0q0H0g8;as4q9@7L4.9|8w514.a07V7l0la;a5a75g970(aoakai049;439-a/9_523s9@a?6y53a_907Q7X532G3ia66N8R017(8Mab9PaG9daJ5?5^afa%aSaZ9ZaV8+a-bx9$049ub44Z9*9,bOaxa)a+bw9j9I0laF9jaeaOagbSaRbNbJb#amaWbFbLb+6laB01aubDaz8n5}0r5s1m2+1b5b1b0F5dc42M2H0W1X59c25k6j0Z0#0%0n04.
Astuce

On peut utiliser des "slices" avec les chaînes de caractères