Aller au contenu

Le problème du rendu de monnaie⚓︎

Les valeurs utilisées

Pour les exercices de cette partie, vous pourrez utiliser la liste suivante pour avoir la valeur des billets et pièces d'euros :

euros = [500, 200, 100, 50, 20, 10, 5, 2, 1]

Il n'est pas conseillé d'utiliser des centimes dans la liste des valeurs, à cause des erreurs d'arrondis sur les nombres réels. Ou alors, il faut que toutes les valeurs soient exprimées en centimes.

Exercice 1

Compléter la fonction rendu_monnaie qui prend en paramètres un entier montant et une liste d'entiers liste_valeurs, et qui renvoie la liste des nombres de billets et pièces nécessaire pour obtenir montant, en en utilisant le moins possible. Les valeurs des billets et des pièces sont données dans l'ordre décroissant.

Vous pourrez, par exemple, utiliser un algorithme glouton.

Exemples d'utilisation
>>> rendu_monnaie(358, euros)
[200, 100, 50, 5, 2, 1]
>>> sum([200, 100, 50, 5, 2, 1])
358
>>> rendu_monnaie(740, euros)
[500, 200, 20, 20]
>>> sum([500, 200, 20, 20])
740
La fonction sum(liste) renvoie la somme de tous les éléments d'une liste de nombres. Elle permet de vérifier que le montant rendu est bien le bon.

###(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;)3=9lwn8gv,S."5/:rf7uemkdas p h10itP(_y2[46cb]-o030u0r0E0v0D0a0w0x0N0a0v0w0w080j0E0D0y0j020z030w0q0s0s0v0n0I020h0R0a0q0+0R0c030l0=0@0_0{0:0y02031b141e0l1b0:0u0D0f0!0$0'0)0A0D0e0A0a1s0A0E0.030V0O0a0r1n0%0(0j1r1t1v1t0E1B1D1z0E0n1c0E0A0!0~0w0y0v0c0)0J0j1F1p0j0o0X0r0c0v0s0r1z1Y1!1(1H1+1D1.1:0.040x0F0n0R0y0R0w0D110c0x0T1W0n0n0r0N28141?0c1c0l1U2l1R1T1S1A0u1^0)1v0c1-251z1k1m0#1G2v0D2x0c0R2B1z0y2e1c2j2l2P0;1Z292D1)2I0n0^0a0.0B2i2T0/2S1@2V1H2X2Z0.0J2%1!2(2j2u0j2-0v2!02072;2k0:2@2+0)2`2|0L2 2?2T2^350.0k38313a332_0R2Y2{0.0M3f2)2U1o2,3k2.020p3p323s343u3m020d3y3h3A3j3l2|09381f2N142B2o0u1T2t3i0N2J1;1c3R1d3P2R152'033X0T2O3H2E2_0.0r0q220w380x3q2^0R0.083_3{3i0-020K3N3z3/0s0D3d0C0C463.1)430g40471)492/4c4e2*3I4h4j4f1H4m020B4o3(2=414r0.4i4A2k3`4k4v4a020k4d4G3-4q3/4s4P4I4u0)4w0J4O2R4J0)4T2P4V4R4l4L4y4p3r4S4E4t4*4K3d4.2^4'2'4)4/4+2/4_424;4U4C484,514D020P3f3g4?0)0t0.0T0o4=4~2,0o0.2e0c0u0q0H0s121.0D0r584:020G5z2W0.5u0c0V5H5D1H4{2=4}3b0.1v0w0E0r0H0f2{3=0n3^4P554g0.060m3f0x5+5O3i0c5Q0D5S5U5p5r5k3|3~5_52445b4P0z5,5-3I5g020o3k5|3I5/025W0a693/0R0b0.2G6f5E025R5T5V5X3?5!4#4W0j435)6062625$1H650b1r1D6l2,5F125I0E6I0)3}02000e0E053 544$3:6c2{5K4%0.6y2P616A6+6C345:5=0H5@0q6$0j6Q0i6@6b0v0y0y1-0u6@435C5#6Y6b6d725'5*6+6A6-6Z5G6M6O6^5{6X6v6b7g1!6N7l5e7j020Q7i776#6z5,7e652e0E3?137r5l6.6n5;6p6=3p0l3+0r2l2M7R3Q1l3S2o2r2m0v1C7U0l3R0:7'0U0W0Y02.

###(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;)3=9lwn8gv,S."5/:rf7uemkdas p h10itP(_y2[46cb]-o030u0r0E0v0D0a0w0x0N0a0v0w0w080j0E0D0y0j020z030w0q0s0s0v0n0I020h0R0a0q0+0R0c030l0=0@0_0{0:0y02031b141e0l1b0:0u0D0f0!0$0'0)0A0D0e0A0a1s0A0E0.030V0O0a0r1n0%0(0j1r1t1v1t0E1B1D1z0E0n1c0E0A0!0~0w0y0v0c0)0J0j1F1p0j0o0X0r0c0v0s0r1z1Y1!1(1H1+1D1.1:0.040x0F0n0R0y0R0w0D110c0x0T1W0n0n0r0N28141?0c1c0l1U2l1R1T1S1A0u1^0)1v0c1-251z1k1m0#1G2v0D2x0c0R2B1z0y2e1c2j2l2P0;1Z292D1)2I0n0^0a0.0B2i2T0/2S1@2V1H2X2Z0.0J2%1!2(2j2u0j2-0v2!02072;2k0:2@2+0)2`2|0L2 2?2T2^350.0k38313a332_0R2Y2{0.0M3f2)2U1o2,3k2.020p3p323s343u3m020d3y3h3A3j3l2|09381f2N142B2o0u1T2t3i0N2J1;1c3R1d3P2R152'033X0T2O3H2E2_0.0r0q220w380x3q2^0R0.083_3{3i0-020K3N3z3/0s0D3d0C0C463.1)430g40471)492/4c4e2*3I4h4j4f1H4m020B4o3(2=414r0.4i4A2k3`4k4v4a020k4d4G3-4q3/4s4P4I4u0)4w0J4O2R4J0)4T2P4V4R4l4L4y4p3r4S4E4t4*4K3d4.2^4'2'4)4/4+2/4_424;4U4C484,514D020P3f3g4?0)0t0.0T0o4=4~2,0o0.2e0c0u0q0H0s121.0D0r584:020G5z2W0.5u0c0V5H5D1H4{2=4}3b0.1v0w0E0r0H0f2{3=0n3^4P554g0.060m3f0x5+5O3i0c5Q0D5S5U5p5r5k3|3~5_52445b4P0z5,5-3I5g020o3k5|3I5/025W0a693/0R0b0.2G6f5E025R5T5V5X3?5!4#4W0j435)6062625$1H650b1r1D6l2,5F125I0E6I0)3}02000e0E053 544$3:6c2{5K4%0.6y2P616A6+6C345:5=0H5@0q6$0j6Q0i6@6b0v0y0y1-0u6@435C5#6Y6b6d725'5*6+6A6-6Z5G6M6O6^5{6X6v6b7g1!6N7l5e7j020Q7i776#6z5,7e652e0E3?137r5l6.6n5;6p6=3p0l3+0r2l2M7R3Q1l3S2o2r2m0v1C7U0l3R0:7'0U0W0Y02.
Exercice 2

Compléter la fonction rendu_monnaie2 qui prend en paramètres un entier montant et une liste d'entiers liste_valeurs, et qui renvoie la plus petite liste de couples (nombre, valeur) correspondant au nombre de fois qu'il faut utiliser valeur pour obtenir montant. Les valeurs des billets et des pièces sont données dans l'ordre décroissant.

Indication

Si on doit rendre n fois une valeur donnée, pour quelle valeur de n est-ce qu'il ne faut pas l'ajouter à la liste ?

Exemples d'utilisation
>>> rendu_monnaie2(358, euros)
[(1, 200), (1, 100), (1, 50), (1, 5), (1, 2), (1, 1)]
>>> rendu_monnaie2(740, euros)
[(1, 500), (1, 200), (2, 20)]
>>> rendu_monnaie2(4567, euros)
[(9, 500), (1, 50), (1, 10), (1, 5), (1, 2)]

###(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;)3=9+lwqnR%8Vgv,S."5/:rf7uOemkdas p h10itP(_y2[46cb]-o030A0x0K0B0J0b0C0D0T0b0B0C0C080o0K0J0E0o020F030C0v0y0y0B0s0O020m0X0b0v0;0X0e0D000B0y0E050D0f0x0~0s0d0v0x0C030q0{0}0 110_0E02031w1p1z0q1w0_0A0J0k0)0+0-0/0G0J0j0G0b1N0G0K0@030#0U0b0x1I0,0.0o1M1O1Q1O0K1W1Y1U0K0s1x0K0G0)140C0E0B0e0/0P0o1!1K0o0t0%0x0e1c0x1U1_1{201$231Y260y2802040D0L0s0X0E0X0C0J17190Z1@0s0s0x0T2t1p2a0e1x0q1=2F1/1;1:1V0A2c0/1Q0e252q1U1F1H0*1#2P0J2R0e0X2V1U0E2y1x2D2F2,0`1`192X212$0s0~0b0@0D0H2C2:0^2/2b2=1$2@2_2{0P2~1{302D2O0o350B2`020D07392E0_3c330/3f3h0D0R3l3b2:3d3r2{0p3v3n3x3p3e0X2^3g2{0S3C312;1J343H363i0u3M3o3P3q3R3J3i0h3V3E3X3G3I3s093%323(3z020H0I3-3O2Y3)3S0H2}1q2 3D3.3_3:0H383~3a1A2*1p2V2I0A1;2N3F0T2%2i0Y1G1x2)0x2+2 3v034h0Z4p412?0@0x0v2n1o462E0D3N3d0X0@083v4F3W3_0?020Q4r4N210y0J0@0p0I3?4D4v3^214P0l4L4G3F4V0@0P4Z4S3'4O0@4)4#4M4=4U4W3;4:4#4+3(4(4*4T1$4-024Y4;4w1$534_513_574/5a4%5c4@544{564}3=5j3d5d2,4`5b0/573B50550/5u2 5w5k5y4}452.5C0o5E3a5G3d573}5L5o5D0@0V3C405H0o0z0@0Z0t5n5x3e0t0@2y0e0A0v0N0y18260J0x5K4q5M4P0M5s3F0e0@5@0e0#6661525m5e5M63021Q0C0K0x0N0k3g4z0s4C5U5+4P060r3C0D6w5Q620@6g6i0N5/5;5*5#4I024K6c5V5N0@0Q5Y4#0F6x6y3(5%020t3H6G3y0@6l0b6!3F0X0c0@2!6(3/6A0J6h6j6%6n6p5}6M4P6u6R6T6T5f4x020e6.3_6I6K5v715p0@4!2,6S6 6w7a0/6W0c1M1Y757265670K7o1$6I000j0K05785F7i3e6$3g694?026}7e7g7g7C6e7q1{7s6L5+777t3q64187r7V0o6I0W7!6e6%6v7L706d0@747S6H4J7'7.7!6I0a7!5S7*7M5M6W0J5)7:6#737^0@7w7y7{4}7d6`6r0@7J3 7+7,6M6e6B6j6E0v7G216I0n8q340@0B0E0E250A8u5W020M605B8k7@8H8e024^797-027)8K5#6s067}6U3_6W2y0K4A7/8O8I6f6;6C8o3M0q4t4o488:0q4b1p0K4d8^2L2G0B1X8=4b1v4$3d2y0y0N0t0B0z6j0G070@1h1j1l1n0D8g471C301w0w198z160D0B0v0-0J0D160%6;0x0s0D0+0D2V6;0J180D4z0*0J1F252R9j1A302V3d1'1P1R1T933F2e25270@0i9C2r9K0B0k2z9E0B9G1G9I9K9M1Q9P0e2R4r4n4$2-4q8/9#6V5'0x828'5+0e5-028o5?5^0$5{8C6N8Eak7O7Y7Qak5O4E7N6:6=6k6m4A6_475~0@6t8Wau8)aw8,836)7=aK6a4Q6Q7K6x7C6W6Y0s7?8Q7FaN766+026-a!728max1Yazar8f8W8jab8Jaa7;6JaX7P68a(7u0@0q0qaX8RaR7~8(a{7Ra@4HaMb96z02b786020gb2aZb46 aT6,a97B8P8%bq6M7v7x058a7ca.7Ia:7LaGa*aJ6qa^8t8S848x8z5:bA8Fana?8d8T6bbc6/aY6'bK3F8UaF7 5.0!8$aXbF8A8p6R1pa48;2F914a0!0$0'02.

###(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;)3=9+lwqnR%8Vgv,S."5/:rf7uOemkdas p h10itP(_y2[46cb]-o030A0x0K0B0J0b0C0D0T0b0B0C0C080o0K0J0E0o020F030C0v0y0y0B0s0O020m0X0b0v0;0X0e0D000B0y0E050D0f0x0~0s0d0v0x0C030q0{0}0 110_0E02031w1p1z0q1w0_0A0J0k0)0+0-0/0G0J0j0G0b1N0G0K0@030#0U0b0x1I0,0.0o1M1O1Q1O0K1W1Y1U0K0s1x0K0G0)140C0E0B0e0/0P0o1!1K0o0t0%0x0e1c0x1U1_1{201$231Y260y2802040D0L0s0X0E0X0C0J17190Z1@0s0s0x0T2t1p2a0e1x0q1=2F1/1;1:1V0A2c0/1Q0e252q1U1F1H0*1#2P0J2R0e0X2V1U0E2y1x2D2F2,0`1`192X212$0s0~0b0@0D0H2C2:0^2/2b2=1$2@2_2{0P2~1{302D2O0o350B2`020D07392E0_3c330/3f3h0D0R3l3b2:3d3r2{0p3v3n3x3p3e0X2^3g2{0S3C312;1J343H363i0u3M3o3P3q3R3J3i0h3V3E3X3G3I3s093%323(3z020H0I3-3O2Y3)3S0H2}1q2 3D3.3_3:0H383~3a1A2*1p2V2I0A1;2N3F0T2%2i0Y1G1x2)0x2+2 3v034h0Z4p412?0@0x0v2n1o462E0D3N3d0X0@083v4F3W3_0?020Q4r4N210y0J0@0p0I3?4D4v3^214P0l4L4G3F4V0@0P4Z4S3'4O0@4)4#4M4=4U4W3;4:4#4+3(4(4*4T1$4-024Y4;4w1$534_513_574/5a4%5c4@544{564}3=5j3d5d2,4`5b0/573B50550/5u2 5w5k5y4}452.5C0o5E3a5G3d573}5L5o5D0@0V3C405H0o0z0@0Z0t5n5x3e0t0@2y0e0A0v0N0y18260J0x5K4q5M4P0M5s3F0e0@5@0e0#6661525m5e5M63021Q0C0K0x0N0k3g4z0s4C5U5+4P060r3C0D6w5Q620@6g6i0N5/5;5*5#4I024K6c5V5N0@0Q5Y4#0F6x6y3(5%020t3H6G3y0@6l0b6!3F0X0c0@2!6(3/6A0J6h6j6%6n6p5}6M4P6u6R6T6T5f4x020e6.3_6I6K5v715p0@4!2,6S6 6w7a0/6W0c1M1Y757265670K7o1$6I000j0K05785F7i3e6$3g694?026}7e7g7g7C6e7q1{7s6L5+777t3q64187r7V0o6I0W7!6e6%6v7L706d0@747S6H4J7'7.7!6I0a7!5S7*7M5M6W0J5)7:6#737^0@7w7y7{4}7d6`6r0@7J3 7+7,6M6e6B6j6E0v7G216I0n8q340@0B0E0E250A8u5W020M605B8k7@8H8e024^797-027)8K5#6s067}6U3_6W2y0K4A7/8O8I6f6;6C8o3M0q4t4o488:0q4b1p0K4d8^2L2G0B1X8=4b1v4$3d2y0y0N0t0B0z6j0G070@1h1j1l1n0D8g471C301w0w198z160D0B0v0-0J0D160%6;0x0s0D0+0D2V6;0J180D4z0*0J1F252R9j1A302V3d1'1P1R1T933F2e25270@0i9C2r9K0B0k2z9E0B9G1G9I9K9M1Q9P0e2R4r4n4$2-4q8/9#6V5'0x828'5+0e5-028o5?5^0$5{8C6N8Eak7O7Y7Qak5O4E7N6:6=6k6m4A6_475~0@6t8Wau8)aw8,836)7=aK6a4Q6Q7K6x7C6W6Y0s7?8Q7FaN766+026-a!728max1Yazar8f8W8jab8Jaa7;6JaX7P68a(7u0@0q0qaX8RaR7~8(a{7Ra@4HaMb96z02b786020gb2aZb46 aT6,a97B8P8%bq6M7v7x058a7ca.7Ia:7LaGa*aJ6qa^8t8S848x8z5:bA8Fana?8d8T6bbc6/aY6'bK3F8UaF7 5.0!8$aXbF8A8p6R1pa48;2F914a0!0$0'02.