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
.128013.8217kg[: r);SĂ©/q(lo4y6b=ac1+5ud3t28_Pw7evp-fh09mnR]is050C0L0E0w0X0p0Y0g0x0p0w0Y0Y0v010E0X0N010406050Y0B0T0T0w0h0s040k0q0p0B0?0q0U050m0}0 11130{0N04051j1c1m0m1j0{0C0X0M0+0-0/0;0-0U0d0B0w0d0L0O0N0s0E0Q1a0g0Q0X0d0Q0p1O0Q0E0_050$0u0p0L1v0.0:011N1P1R1P0E1X1Z1V0E0h1k1J0+160Y0N0w0U0;0F011#1x010P0(0L0U0w0T0L1V1`1|211%241Z27290_0a0g0I0h0q0N0q0Y0X190U0g0!1^0h0h0L0x2u1c2c0U1k0m1J2H1;1?1=1W0C2e1y0X0U262r1V1s1u0,1$2R2T0U0q2X1V0N2A1k2F2H2.0|1{2v2Z222%0h100p1V0w1M2A0P0;030H0H0x2(0L1R2$0q0O0R0O0y0_0y1c0w2/2=0`2;2d2@1%2_2{2}2 0L3101333537392U3c0O1 040F3i3k1|3m2F2Q013r0w2|1k2~0Q303234360!3B2%3D0D0_0D3I2E3l0{3M3p0;3P3R053T3V3x3X3A2S3C3d0r0_0r3*1d3,3n2?1w3q0q2`3Q3t3U3v3W3z3Z3|3#3d0A0_0A422.3-2=3N3;4c3^3y3Y384i3b3d0t0_0t4o443.473:493s3S3u3w4w3{3a3D0K0_0K4F3K4q3o4I3O4K4b4M4d4O3`4h4R3d0G0_0G4W2G4Y462!4#4a3=3@4e3_4g4y4-0O0S0_0S4=2H2+0L2H2X2K0C1?2P3/014x2W1t1k592-3l3+3K054x5o2d0X0C0;342F3D3f4M5w5y503!4A3e202i0L5F4x5H5B1V0m3j453N0c0_0!0P5q2G0g5U5h0U0P0_1;0w0C0B0X2A0H2o102S5!5u4^220^040o5_5%4!0U0_2%0T0u2A604H4_5}0i0f5_0{435r3M5E015z2=3D3F3?0g6k4+513}3E5K285M6l5G4z6o5R5T6a220J0_0g6K5$6h2G614_0Y0C0_020n0B0q0E0j6U6W6Y6!6X0j0g0V260M0q0X1!0p0b0l0x0h2t0B2A2w6?0X2{1!5.0g6567701a0U0l0g260+1N0P0P2A0Y6f694r6s0H5A3d3%5D5x6A5O6C7n6x295N4Q6v7o3*6G1%6R6J6L5?0%0U0*6%6$6V6(7L0j7h6N5`6r7q6m1|3D3 7p7x4,6v3 726y7#6u4j0O7Z3I6L5$7C0;5W040X5Z7S7=4r5(0u0_2h7i4Z6b0_5 7S6P2^640q6668887?016c5_7}84220q0_0v0v8j891%0T0X3g835{1%5}6e7S6g2:6j7V7l6n4k3t7k7s524l7)7w7r7y7-4l2H3j7;7;8s7@0_2A0E6`1b7|8Z3O8#8c7I7g8f7~4!5}0e8x4s8b8d0L8_5h5}0W7R8E7j8G7m0O4C7!8R7$7-4C8P6z6t5P4B6E048Y8g7^4y7{2.8k8y3:8-5@7J8~8?0_8^8;8l3q8{749x85049A939C0;8u0_0R9G5|0_0W918*8g8n04020d6Y8q9V8=4_63047H2S8:9K9s8h9z9Q9D04738e9/3N8@9?9M8v043h9B9:900W8B4p8_7k964T999g7t0O4T9e7+9hag9j8X6L8+7^8$8(8r8g9*9,9wa39|9=ay5(9E9`5p8g9}aB4!9N049PaI9H9Tat9(8m0_0zaQ9L8,045,5.5:0L5=8.5^aN9R5~9~aX9_8}a*8zaA9{5haKa2a@9y040f0W0i92aF945F964/ad6B524/ai9a7,5Ib67:ao9m0_380Ya:a{9Ha744ayaa8I538K8G8M6v54bbae52548V9kan9r5V8#0#as9%aW9*aZ5/5;awa-5}87bn8a9^8c9Fa;0;aHbW8ta0a`b2aW8Aa aV9:9X0Ob:8`9+a(axb(b$a?b,9:9*a/bTb~6iaRb)9Oc304aP8C600m5t1n2,1c5c1c0E5eck2N2I0w1Y5aci5l6g0!0$0(0Y04.
Astuce
On peut utiliser des "slices" avec les chaînes de caractères
# Tests
(insensible Ă la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)