Aller au contenu

Somme des chiffres pour un nombre en écriture décimale⚓︎

On veut calculer la somme des chiffres d'un nombre en écriture décimale. Ce genre d'opération est effectué de manière naturelle en primaire pour déterminer si un nombre est un multiple de \(3\) ou de \(9\) : on fait la somme de ses chiffres, et on regarde si cette somme est elle-même un multiple de \(3\) ou de \(9\).

En revanche, là où il est très facile pour un humain de savoir quels chiffres composent un nombre, cette décomposition ne va pas de soi pour un ordinateur.

Cet exercice réalise cette opération en deux étapes, une étape où on décompose un nombre au moyen de la fonction decomposition, où on compte le nombre d'occurrences de chacun de ses chiffres et on stocke ce résultat dans un tableau d'effectifs, et une étape où on prend un tel tableau avec la fonction somme_chiffres, et on calcule la somme des chiffres associée.

Ainsi le nombre \(222270\) a pour tableaux d'effectifs #!py [1, 0, 4, 0, 0, 0, 0, 1, 0, 0]` et pour somme des chiffres \(1×0 + 0×1 + 4×2 + 0×3+ 0×4 + 0×5 + 0×6 + 1×7+ 0×8 + 0×9 = 8+7 = 15\)

Exemple
🐍 Console Python
>>> decomposition(222270)
[1, 0, 4, 0, 0, 0, 0, 1, 0, 0]
>>> somme_chiffres([1, 0, 4, 0, 0, 0, 0, 1, 0, 0])
15
1. Fonction decomposition

Compléter la fonction decomposition qui prend en argument un nombre entier positif nombre et qui renvoie le tableau effectifs tel que pour 0 <= i <= 9, effectifs[i] contient le nombre d'occurrences de i dans nombre.

Opérateurs de la division entière

L'opérateur // permet de calculer la division entière entre deux nombres entiers, à savoir le quotient de leur division euclidienne.

>>> 10 // 4
2

L'opérateur % permet de trouver le reste de la division entière entre deux nombres.

>>> 10 % 3
1
Exemples
>>> decomposition(342424)
[0, 0, 2, 1, 3, 0, 0, 0, 0, 0]
>>> decomposition(10111213141516171819)
[1, 11, 1, 1, 1, 1, 1, 1, 1, 1]
>>> decomposition(1234567890)
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> decomposition(1337 ** 42)
[18, 13, 15, 8, 14, 9, 12, 8, 16, 19]
>>> somme_chiffres(decomposition(111223))
10

###(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 : 10/10

.128013s3o_;èbcdufvg/0lyq nAapS!r1meh,(P2=4:+twk%i][5R*)é6050j0D0N0w0R0q0b0t0i0q0w0b0b0J010N0R0x010406050b0k0C0C0w0A0r040y0d0q0k0@0d0u0t020w0C0x0f0t0V0D110A0s0k0D0b050o0~1012140|0x041s1z051C0o1C1E1z0|0j0R0m0,0.0:0=0E0R0n0E0q1S0E0N0`050%0h0q0D1N0/0;011R1T1V1T0N1#1%1Z0N0h0d0j141!0A1A0N0E0,170b0x0w0u0=0I011)1P010l0)0D0u1f0D1Z24262b1+2e1%2h0C2j040a0t0H0A0d0x0d0b0R1a1c0#220A0A0D0i2E1s2l0u1A0o202Q0N1~1}1 0j2n0=1V0u2g2B1Z1K1M0-1*2!0R2$0u1`1L1Z0x2J1A2O2Q2{0}251c2,2c2;0A110q0`0B2N2 0{2~2m311+33350`0I39263b2O2Z013g0w36040c3k2P0|3n3e0=3q3s0K3v3m2 3o3B0`0U3E3x3G3z3p0d343r0`0Z3E1B2_1s2*2T0j2X3o0i1`2t0!1L1A2^0D2`3a3V3(0#3:3d1O1+0P0`0#0l3V3y3`0=0O0`0t403N423p0l3}2K0d1g2B2D0R1b473_2-010_040G4k30490u0`2;0C0h2J4r3o4o0X0L3L0t4G46414m4u040D0l0l2K0@0l0b0e0i1R4O2J1r1t3a4I484m0d0`0J3E4$4l2c4o0T4A3O0C0R0`0p4=494o0S4,3c4s4(0`0W4 4J2c4@374`4!3l064H4-512c3|040O1R1%554%324v4e4y0D5n4.1+4)040z4+5b2P5f3o58045a2}561+4o4E5B0{5e5e503H5q4x4z5N5R3O4o0F5u5g3f0`0k0u2D5t5N5D3O5x5A2{5.4t5T5s5#3o5x0o0o5`4?4^040B5H3;5J0=5Z5 5@044w5_5-5X495x0Q694m5F634F5P4G6f4K0`4N4P2L0R4S4U4W0l4Y4{4m4:6C5p045)5+6F5K0`4~6e66015:6j6G6t4Q6w4T4V6w6A1q6K670`4;5W6P4L6I0N5,5I5o6L046N5=6q2c5x0M6S1+6l6n6p6P5i2J0N0k0A0u6}3A6s4O6V6x6Y4X6#5N0|0o3?3/3W7m0o3Z1s0N3#7r2V2R1_1{2T0w1$7o3Z1y3^5$0=2J0C0e0l0w0P0D0e0E0c0`1k1m1o1q0t5M2}1F3b1z0v192J0t0m0D0A2C1b0t0q0Y0n0g7I2g0N0t0x180+0b0r0u200Y0@7V7X1B3b2*3o1-1U1W1Y7F3o2p2g2i0`2v0y0i0A0^7`0H0r204j5W3.7F2|3;7l045Q724c3 6*6;43456$4a4c3(4f2C2M8G5v6%4p8K4L6c5V6:8S4n0`4D705?6r4M7c6v7e6z6B6O8H6Q4*798#046)8Z7G015F643l6_6=6@4#920=5x548;8!6l903w8C8=5i5k2f8^8W5r8Y956P5x5z8^8 8K5L8(9f8!9l5U6/658=689a8}6,5*6.8^6R9F3H0h3}1L0C1`9u0`4q8R9G5^9n916P9E6^6P9c9T040X9w4H963p7b6u4R6X8/7h8|4B6(8V5(9I9B9!9D6M9K0`0M5;9o8=6 7i9x8}730$76789M3O4L6U8-9@6Z8:2{7j8A7n2Q7D3Y0$0(0*04.

###(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 : 10/10

.128013s3o_;èbcdufvg/0lyq nAapS!r1meh,(P2=4:+twk%i][5R*)é6050j0D0N0w0R0q0b0t0i0q0w0b0b0J010N0R0x010406050b0k0C0C0w0A0r040y0d0q0k0@0d0u0t020w0C0x0f0t0V0D110A0s0k0D0b050o0~1012140|0x041s1z051C0o1C1E1z0|0j0R0m0,0.0:0=0E0R0n0E0q1S0E0N0`050%0h0q0D1N0/0;011R1T1V1T0N1#1%1Z0N0h0d0j141!0A1A0N0E0,170b0x0w0u0=0I011)1P010l0)0D0u1f0D1Z24262b1+2e1%2h0C2j040a0t0H0A0d0x0d0b0R1a1c0#220A0A0D0i2E1s2l0u1A0o202Q0N1~1}1 0j2n0=1V0u2g2B1Z1K1M0-1*2!0R2$0u1`1L1Z0x2J1A2O2Q2{0}251c2,2c2;0A110q0`0B2N2 0{2~2m311+33350`0I39263b2O2Z013g0w36040c3k2P0|3n3e0=3q3s0K3v3m2 3o3B0`0U3E3x3G3z3p0d343r0`0Z3E1B2_1s2*2T0j2X3o0i1`2t0!1L1A2^0D2`3a3V3(0#3:3d1O1+0P0`0#0l3V3y3`0=0O0`0t403N423p0l3}2K0d1g2B2D0R1b473_2-010_040G4k30490u0`2;0C0h2J4r3o4o0X0L3L0t4G46414m4u040D0l0l2K0@0l0b0e0i1R4O2J1r1t3a4I484m0d0`0J3E4$4l2c4o0T4A3O0C0R0`0p4=494o0S4,3c4s4(0`0W4 4J2c4@374`4!3l064H4-512c3|040O1R1%554%324v4e4y0D5n4.1+4)040z4+5b2P5f3o58045a2}561+4o4E5B0{5e5e503H5q4x4z5N5R3O4o0F5u5g3f0`0k0u2D5t5N5D3O5x5A2{5.4t5T5s5#3o5x0o0o5`4?4^040B5H3;5J0=5Z5 5@044w5_5-5X495x0Q694m5F634F5P4G6f4K0`4N4P2L0R4S4U4W0l4Y4{4m4:6C5p045)5+6F5K0`4~6e66015:6j6G6t4Q6w4T4V6w6A1q6K670`4;5W6P4L6I0N5,5I5o6L046N5=6q2c5x0M6S1+6l6n6p6P5i2J0N0k0A0u6}3A6s4O6V6x6Y4X6#5N0|0o3?3/3W7m0o3Z1s0N3#7r2V2R1_1{2T0w1$7o3Z1y3^5$0=2J0C0e0l0w0P0D0e0E0c0`1k1m1o1q0t5M2}1F3b1z0v192J0t0m0D0A2C1b0t0q0Y0n0g7I2g0N0t0x180+0b0r0u200Y0@7V7X1B3b2*3o1-1U1W1Y7F3o2p2g2i0`2v0y0i0A0^7`0H0r204j5W3.7F2|3;7l045Q724c3 6*6;43456$4a4c3(4f2C2M8G5v6%4p8K4L6c5V6:8S4n0`4D705?6r4M7c6v7e6z6B6O8H6Q4*798#046)8Z7G015F643l6_6=6@4#920=5x548;8!6l903w8C8=5i5k2f8^8W5r8Y956P5x5z8^8 8K5L8(9f8!9l5U6/658=689a8}6,5*6.8^6R9F3H0h3}1L0C1`9u0`4q8R9G5^9n916P9E6^6P9c9T040X9w4H963p7b6u4R6X8/7h8|4B6(8V5(9I9B9!9D6M9K0`0M5;9o8=6 7i9x8}730$76789M3O4L6U8-9@6Z8:2{7j8A7n2Q7D3Y0$0(0*04.
2. Fonction somme_chiffres

Compléter la fonction somme_chiffres qui prend en argument un tableau d'occurrences de chiffres effectif_chiffres de taille \(10\) (on vérifiera ce point), contenant pour 0 <= i <= 9 le nombre de fois où le chiffre i est présent et qui renvoie la somme des chiffres ainsi comptés.

Exemples
>>> somme_chiffres([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
45
>>> somme_chiffres([0, 0, 0, 0, 0, 0, 0, 0, 0, 1])
9
>>> somme_chiffres([0, 9, 0, 0, 0, 0, 0, 0, 0, 0])
9
>>> somme_chiffres([0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 10, 30, 12])
AssertionError: Le tableau doit être de taille 10

###(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 : 10/10

.128013s3o_;èbcdufvg/0lyq nAaêpSr1Lmeh,(P2=4:+twki][5R*)é6050j0E0O0w0R0q0b0t0i0q0w0b0b0K010O0R0y010406050b0k0D0D0w0A0r040z0d0q0k0@0d0u0t020w0D0y0f0t0V0E110A0s0k0E0b050o0~1012140|0y041s1z051C0o1C1E1z0|0j0R0m0,0.0:0=0F0R0n0F0q1S0F0O0`050%0h0q0E1N0/0;011R1T1V1T0O1#1%1Z0O0h0d0j141!0A1A0O0F0,170b0y0w0u0=0J011)1P010l0)0E0u1f0E1Z24262b1+2e1%2h0D2j040a0t0I0A0d0y0d0b0R1a1c0#220A0A0E0i2E1s2l0u1A0o202Q0O1~1}1 0j2n0=1V0u2g2B1Z1K1M0-1*2!0R2$0u1`1L1Z0y2J1A2O2Q2{0}251c2,2c2;0A110q0`0B2N2 0{2~2m311+33350`0J39263b2O2Z013g0w36040c3k2P0|3n3e0=3q3s0L3v3m2 3o3B0`0U3E3x3G3z3p0d343r0`0Z3E1B2_1s2*2T0j2X3o0i1`2t0!1L1A2^0E2`3a3V3(0#3:3d1O1+0Q0`0#0l3V3y3`0=0P0`0t403N423p0l0`0b0d100E0e0i1R0l0l2J1r1t3;412-010_040H473_4r0u0`0E4k2K0@0l0b4h4j4l1q4w30494t0X0M3L0t4S464q2c0i0B0`030t1*0E0A0O0t2q0H4B0l4D0R4F4H4:4J0b0X0t0K0K0t0B0p0G0t0C1(1=0E0w0k0t0j0d2D0t0x2U1(2G0%0)1%4}0p4R4T3c4M4y0`4m0k0q0%0O3E4U484r0d0`0K5x5o3o0D0R0`5l4o3l064T5y4x2c3|040l3Q5E4V3f0`0R5W5z2c0d44042/5#5Q3f0h5r260n0E4L3o4t4v5L2P5F3O5H375K2}5X0=4O4Q5{0{5O5O5}494z045s5u0w5w675P5p5%5C5,6l5Y6e1q5t5v6o3o5B040N6v3O6d4-4/4;4i4?4m5@3O4t0T6J6c5Z6N4r4t0S6A496x0W6U5q5*5m4S6b4r5S2J0O0k0A0u6Y325r6s6g6i2{0|0o3?3/3W6|0o3Z1s0O3#712V2R1_1{2T0w1$6~3Z1y3^6p0=2J0D0e0l0w0Q4g0F0c0`1k1m1o1q0t662}1F3b1z0v192J0t0m4%2C1b4*0Y0n0g7i2g4)0y180+0b0r0u200Y0@7u7w1B3b2*3o1-1U1W1Y7f3o2p2g2i0`2v0z0i0A0^4)0I0r201b3V3.7f2|3;6{7.3O5S3~6Q2c5)46676%324b044d4f4=4k6I8f634s0`5`625$6q6D2L4:4G6G8n4K8p8v640`4P6#6k3H6;0~6?6/1+6x5D6j8g1+5 04613a5N5n8q5S5U0A8P3A0`8B4J8b1+4t0G8*3p4A4C8y3 8T8q5(5Z6.8|8F3p5/042g0 4%6h5?8E5-8G4u8/8+958_4E8A4I8o8u9c8r048I678!698K6B8M6t6h8?6x0N8S2{9v6O048-2J9A0`6X919o6C9i4:8J8U0=6)0$6,909E9T8@6r8N6u6j6_866}2Q7d3Y0$0(0*04.