Multiple

Soient \(a\) et \(b\) deux entiers positifs.

On dit que \(a\) est un multiple de \(b\) s'il existe un autre entier \(k\) tel que \(a =k \times b\).

On demande d'écrire une fonction est_multiple qui :

  • prend en paramètres deux entiers strictement positifs a et b ;

  • renvoie True si le premier est un multiple du second, False dans le cas contraire.

Python propose une solution native détaillée ci-dessous pour répondre à cette question.

Solution native

Il suffit en effet de vérifier que le reste de la division euclidienne de \(a\) par \(b\) vaut \(0\).

L'expression Python renvoyant le reste de la division de a par b est a % b.

Une solution native serait donc :

🐍 Script Python
def est_multiple(a, b):
    return a % b == 0

Cette solution ne permet toutefois pas de répondre au cas \(b = 0\) (il est impossible de diviser par \(0\)).

On propose de raisonner différemment. Pour ce faire, on gère immédiatement le cas \(b = 0\) en observant que le seul multiple de \(b = 0\) est \(a = 0\). Ce cas particulier étant traité :

  • on crée une variable multiple prenant initialement la valeur 0 ;

  • tant que multiple est strictement inférieur à a, on ajoute b à la valeur de multiple ;

  • en fin de boucle on teste l'égalité de multiple et a : s'ils sont égaux, a est un multiple de b. Sinon, a n'est pas un multiple de b.

Exemples
>>> est_multiple(0, 0)
True
>>> est_multiple(5, 0)
False
>>> est_multiple(10, 2)
True
>>> est_multiple(10, 10)
True
>>> est_multiple(2, 10)
False
>>> est_multiple(7, 3)
False
assert ?

Le mot clé assert est utilisé en Python afin de vérifier que des propositions sont vraies.

Ainsi, l'instruction assert 3 + 5*7 == 38 permet de vérifier que l'expression 3 + 5*7 est bien évaluée à 38.

Si c'est le cas, le programme continue de se dérouler normalement. Dans le cas contraire, le programme est interrompu et une erreur est signalée.

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

.128013bqêO,9vià3o_x;lpwTf( g06-)2s1+8ené4Em5tLRPhk:c.a=ryFSu/7d050)0G0N0W0i0p0C0v0U0p0W0C0C0X010N0i0q010406050C0$0L0L0W0Y0Z040#0l0p0$0}0l0H0v020W0L0q0o0v0P0G170Y0c0$0G0C050%1416181a120q04051F1y1I0%1F120)0i0h0=0@0_0{0R0i0w0R0p1W0R0N10050-0b0p0G1R0^0`011V1X1Z1X0N1)1+1%0N0Y1G0N0R0=1d0C0q0W0H0{0B011-1T010t0/0G0H1l0G1%23252a1/2d1+2g0L2i040a0v0Q0Y0l0q0l0C0i1g1i0+210Y0Y0G0U2D1y2k0H1G0%1 2P1|1~1}1(0)2m0{1Z0H2f2A1%1O1Q0?1.2Z0i2#0H0l2)1%0q2I1G2N2P2`13241i2+2b2:0Y170p100v0D2M2~112}2l301/3234360B39253b2N2Y013g0W35040v0k3k2O123n3e0{3q3s0v0J3w3m2~3o3C360M3G3y3I3A3p0l333r360y3N3c2 1S3f3S3h3t0(3X3z3!3B3$3U3t0F3*3P3,3R3T3D0g3=3d3@3K040D0x3|3Z2,3^3%0D381z3a3O3}453 0D3j4a3l4c44313.3s0D3v4i2O1J2^1y2)2S0)1~2X3Q0U2;2s0*1P1G2@0G2_3a3G054C0+4K4d2b0S100+0t4M3+450r364X3?4e0t101w0N0m0L0$0p0}0q1+4$4R1/0 040u4@4l3f100W4}3o4`0f3G0v3Y3J100b523Q4`0A0T3N0v5i574Y4S100i4W4r3t583Q0H5a565s3@0l100X0X5w5l1/0L0i10425q5x454`5g5q065j5R5k4%5m045o5D5U4 04515q5T4^0{5z045B5Y5)015G5I5c3@5N5h5S5`5L5V2I0N0$0Y0H5.4~0{0S0U100s0Y1v5_5{5E654*0:0G5?5M105O2`5Q5`6d5Z6f045~60625%5|1/66100!3r0C6i5P5R6y3B104.4:0~4?6x6e015+5C6P6r5:5H045J6n6H6Q4T040r1V6O2`5(643p6K4/4;6+3a6-3o5+024:0o63595#6j2b5^6G6p6I6/046L6=6F6,766S6~5t6:6M4=7b6@7d100E7f3~5v745i766%5X6U5/5u786;6N7k3l6^3Q6S6T7c6Q7z5$2|6Q736!756$106u617p456A04696b7s7F3@6%0G6h714_6l6c5S7u7T0,6v7W4S67046C7+5P1y4O4J4t810%4w1y0N4y862V2Q0W1*834w1E4Q6.2I0L0m0t0W0S0G0m0R0k101q1s1u1w0v6m4L1L3b1F0O0W0v0C1d1f0i1h0v0q0G1f0v0d1|1,3r0p0I0w0I0G0V1J8C040K1i0G0t0t0,0f0v0j0v0+0$0n0v2I2@0i6E0C8.8L8*8,2K1v0v0$1i0N4+0v0,0v0p008L2I0H0h0l0i1,4N4D3o1;1Y1!1$8h3o7Y7!7D4s0%803t2B0=7*0$0i0z0U0i990C0N0v0I0h3r0$0I8/57809n1!1?1#2j6V9u6a9w2P9z999L9l2F3Q9o9X9r7u7`7|6E4M9y4D9A000/9J9L9N9P9R8:9,1,9.9W9q9Z5/7Y9@9%7 9{8!8B8g0e1i8N8P0)1h0U8;0i2I2K1r2f9L9f9h0Z0G0Y9b1,0Y0I144:0W9L0)0$0v979K8y8#1N1P9V1=a99s3Q2o2f2h102u0#0U0Y0~9L0Q0Z1 1h4M4I8h2{4L9z7;044V7,0{4!5r5K7K4)044+4-7B7ja}014`4|b16V7Lb9547^5!5bbd5/5e8z4j6#9!5n5p7Jbe7rbu5/7Hbi0{5;6Ybg7.7$bqab7=5 7V7x6.bfbM6_5A7I7l6QbC6Z4bbHbN7h7abA6R5Ab$bV7/a`6)2eb$7z797Cb$6`6|b/50bE04bo3x6p7%4eb!b=bP7Gb(c47q7A7i6?7E7m047oc7c104bk7Q7t7S6t7?bLbxbZc9b#cg2bbzcu5!7M4baf4P822P8f4v0,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

.128013bqêO,9vià3o_x;lpwTf( g06-)2s1+8ené4Em5tLRPhk:c.a=ryFSu/7d050)0G0N0W0i0p0C0v0U0p0W0C0C0X010N0i0q010406050C0$0L0L0W0Y0Z040#0l0p0$0}0l0H0v020W0L0q0o0v0P0G170Y0c0$0G0C050%1416181a120q04051F1y1I0%1F120)0i0h0=0@0_0{0R0i0w0R0p1W0R0N10050-0b0p0G1R0^0`011V1X1Z1X0N1)1+1%0N0Y1G0N0R0=1d0C0q0W0H0{0B011-1T010t0/0G0H1l0G1%23252a1/2d1+2g0L2i040a0v0Q0Y0l0q0l0C0i1g1i0+210Y0Y0G0U2D1y2k0H1G0%1 2P1|1~1}1(0)2m0{1Z0H2f2A1%1O1Q0?1.2Z0i2#0H0l2)1%0q2I1G2N2P2`13241i2+2b2:0Y170p100v0D2M2~112}2l301/3234360B39253b2N2Y013g0W35040v0k3k2O123n3e0{3q3s0v0J3w3m2~3o3C360M3G3y3I3A3p0l333r360y3N3c2 1S3f3S3h3t0(3X3z3!3B3$3U3t0F3*3P3,3R3T3D0g3=3d3@3K040D0x3|3Z2,3^3%0D381z3a3O3}453 0D3j4a3l4c44313.3s0D3v4i2O1J2^1y2)2S0)1~2X3Q0U2;2s0*1P1G2@0G2_3a3G054C0+4K4d2b0S100+0t4M3+450r364X3?4e0t101w0N0m0L0$0p0}0q1+4$4R1/0 040u4@4l3f100W4}3o4`0f3G0v3Y3J100b523Q4`0A0T3N0v5i574Y4S100i4W4r3t583Q0H5a565s3@0l100X0X5w5l1/0L0i10425q5x454`5g5q065j5R5k4%5m045o5D5U4 04515q5T4^0{5z045B5Y5)015G5I5c3@5N5h5S5`5L5V2I0N0$0Y0H5.4~0{0S0U100s0Y1v5_5{5E654*0:0G5?5M105O2`5Q5`6d5Z6f045~60625%5|1/66100!3r0C6i5P5R6y3B104.4:0~4?6x6e015+5C6P6r5:5H045J6n6H6Q4T040r1V6O2`5(643p6K4/4;6+3a6-3o5+024:0o63595#6j2b5^6G6p6I6/046L6=6F6,766S6~5t6:6M4=7b6@7d100E7f3~5v745i766%5X6U5/5u786;6N7k3l6^3Q6S6T7c6Q7z5$2|6Q736!756$106u617p456A04696b7s7F3@6%0G6h714_6l6c5S7u7T0,6v7W4S67046C7+5P1y4O4J4t810%4w1y0N4y862V2Q0W1*834w1E4Q6.2I0L0m0t0W0S0G0m0R0k101q1s1u1w0v6m4L1L3b1F0O0W0v0C1d1f0i1h0v0q0G1f0v0d1|1,3r0p0I0w0I0G0V1J8C040K1i0G0t0t0,0f0v0j0v0+0$0n0v2I2@0i6E0C8.8L8*8,2K1v0v0$1i0N4+0v0,0v0p008L2I0H0h0l0i1,4N4D3o1;1Y1!1$8h3o7Y7!7D4s0%803t2B0=7*0$0i0z0U0i990C0N0v0I0h3r0$0I8/57809n1!1?1#2j6V9u6a9w2P9z999L9l2F3Q9o9X9r7u7`7|6E4M9y4D9A000/9J9L9N9P9R8:9,1,9.9W9q9Z5/7Y9@9%7 9{8!8B8g0e1i8N8P0)1h0U8;0i2I2K1r2f9L9f9h0Z0G0Y9b1,0Y0I144:0W9L0)0$0v979K8y8#1N1P9V1=a99s3Q2o2f2h102u0#0U0Y0~9L0Q0Z1 1h4M4I8h2{4L9z7;044V7,0{4!5r5K7K4)044+4-7B7ja}014`4|b16V7Lb9547^5!5bbd5/5e8z4j6#9!5n5p7Jbe7rbu5/7Hbi0{5;6Ybg7.7$bqab7=5 7V7x6.bfbM6_5A7I7l6QbC6Z4bbHbN7h7abA6R5Ab$bV7/a`6)2eb$7z797Cb$6`6|b/50bE04bo3x6p7%4eb!b=bP7Gb(c47q7A7i6?7E7m047oc7c104bk7Q7t7S6t7?bLbxbZc9b#cg2bbzcu5!7M4baf4P822P8f4v0,0.0:04.