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.128013w]itkc[v8o-)yl0bqp_P3(a;+g=R/m4rse97Sfd 612:é5nuh050O0J0f0y0e0p0I0P0h0p0y0I0I0C010f0e0t010406050I0X0F0F0y0H0o040M0l0p0X0?0l0W050E0}0 11130{0t04051j1c1m0E1j0{0O0e0j0+0-0/0;0-0W0B0X0y0B0J0m0t0o0f0Y1a0P0Y0e0B0Y0p1O0Y0f0_050$0r0p0J1v0.0:011N1P1R1P0f1X1Z1V0f0H1k1J0+160I0t0y0W0;0S011#1x010N0(0J0W0y0F0J1V1`1|211%241Z27290_0b0P0v0H0l0t0l0I0e190W0P0!1^0H0H0J0h2u1c2c0W1k0E1J2H1;1?1=1W0O2e1y0e0W262r1V1s1u0,1$2R2T0W0l2X1V0t2A1k2F2H2.0|1{2v2Z222%0H100p1V0y1M2A0N0;030u0u0h2(0J1R2$0l0m0q0m0R0_0R1c0y2/2=0`2;2d2@1%2_2{2}2 0J3101333537392U3c0m1 040S3i3k1|3m2F2Q013r0y2|1k2~0Y303234360!3B2%3D0w0_0w3I2E3l0{3M3p0;3P3R053T3V3x3X3A2S3C3d0G0_0G3*1d3,3n2?1w3q0l2`3Q3t3U3v3W3z3Z3|3#3d0V0_0V422.3-2=3N3;4c3^3y3Y384i3b3d0Q0_0Q4o443.473:493s3S3u3w4w3{3a3D0L0_0L4F3K4q3o4I3O4K4b4M4d4O3`4h4R3d0k0_0k4W2G4Y462!4#4a3=3@4e3_4g4y4-0m0K0_0K4=2H2+0J2H2X2K0O1?2P3/014x2W1t1k592-3l3+3K054x5o2d0e0O0;342F3D3f4M5w5y503!4A3e202i0J5F4x5H5B1V0E3j453N0g0_0!0N5q2G5U5h0c0_0P5!5u4^2^0N0_1;0y0O0X0e2A0u2o102S5+5$4!0^040x5~4H4_0W0_2%0F0r2A644r5h610n0T5+0{435r3M5E015z2=3D3F3?0P6o4+513}3E5K285M6p5G4z6s5R5T65225(040P6O5*6l5#6K1%0I0O0_020s0X0l0f0z6Y6!6$6(6#0z0P0D260j0l0e1!0p0a0U0h0H2t0X2A2w6`0e2{1!5?0P696b741a0W0U0P260+1N0N0N2A0I6j6d5v5x6E5A3d3%5D7o6x5P7r6B295N4Q6z7s3*6T0;6V5)6P5{0%0W0*6+6*6Z6,7O0z7l6R5,6v7u0u7q0m3 7t7A4,6z3 766C7(6y4j7#6I6N6P5 4_5W040e5Z7V5*7F3O0r0_2h7m5-1%61637V7^2^680l6a6c8a806g5+7 6e4!0l0_0C0C8k8b1%0F0e3g853N616i7V6k2:6n7Y7!4l7%6E5O6G4k7y6D7v8M0m8I3I6P8V8l4Z7_0_2A0f6~1b7~8t3:8!8e7L7k8h8m4_610i8y5h6704778g8E8;22610d7U8~7n5F7!4C8J8Q524C7,7z8K7B7:988U7@807`4y7}2.8X868+047K2S8/949r018?8^4!8`8|0J9B8=0_8@8:8Y228v0_0q9G900_0d928)808o04020B6$8r9V8 3q8,5|7M9Q879I9-9s9E9:9z9/9K9y9N043h9_8z9S0d8B4p8y6w7Z6r3d4T996F524T9d8Pab6za99j8W9q5V8!0#8%8s808`9u9,9~6f9^9x4s8d8f9Fav60ax5p809{9PaD9H049Taq9(0;9X0AaO9L9)045;5?5^0J5`8-5}aK9R629?9D8e789?9Aa(8u8w9|a/0_0T0d0n93aG4ra57!4/aa8L524/ae7.7w0mb2ajal5h9m0)aCayaw04a2449~b0a7533ta5b46z54b79f7)7:542H3jak6O8*017`8#ap9%aU9saX5@5_ata^a*a;9;a-8}a~bL9@049Jbi4!9{9}b$aLa`a|bK9y9X0maT9yasa$aub*a)b#bXb?aAa.bTbZb|6maP01aIbRaN8C5~0E5t1n2,1c5c1c0f5eci2N2I0y1Y5acg5l6k0!0$0(0I04.
Astuce

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