166 votes

Comment vérifiez-vous si un nombre est divisible par un autre nombre?

Je dois tester si chaque nombre de 1 à 1000 est un multiple de 3 ou un multiple de 5.

J'ai essayé ce code en Python 2.x:

n = 0
s = 0

while (n < 1001):
    x = n/3
    if isinstance(x, (int, long)):
        print 'Multiple of 3!'
        s = s + n
    if False:
        y = n/5
        if isinstance(y, (int, long)):
            s = s + n

    print 'Number: '
    print n
    print 'Sum:'
    print s
    n = n + 1

L'idée est d'essayer de diviser le nombre et de voir si le résultat est un entier. Cependant, je n'obtiens pas le résultat attendu.

Comment puis-je tester si le nombre est un entier?


En 2.x, une division comme celle-ci produira un entier, en ignorant le reste; voir <a href="https://stackoverflow.com/questions/1267869">Comment puis-je forcer la division en point flottant ? La division continue d'arrondir à 0 ?</a> pour plus de détails.

En 3.x, la division produira une valeur en point flottant; le résultat <strong>n'est pas</strong> "un entier" <em>même s'il s'agit d'un nombre entier</em>, donc le test <code>isinstance</code> échouera. Voir <a href="https://stackoverflow.com/questions/1282945">Pourquoi la division entière donne un flottant au lieu d'un autre entier ?</a> pour plus de détails.

Si vous avez besoin du reste de la division entière plutôt que simplement tester la divisibilité, voir <a href="https://stackoverflow.com/questions/5584586">Trouver le reste de la division d'un nombre</a>.

2 votes

En Python 2.x, la division d'entiers donne toujours un entier.

22 votes

Vous devriez imprimer "Fizz" et "Buzz"

12 votes

Problème 1 du Projet Euler ?

317voto

David Heffernan Points 292687

Vous pouvez le faire en utilisant l'opérateur modulo, %

n % k == 0

est vrai si et seulement si n est un multiple exact de k. En mathématiques élémentaires, c'est ce qu'on appelle le reste d'une division.

Dans votre approche actuelle, vous effectuez une division et le résultat sera soit

  • toujours un entier si vous utilisez une division entière, ou
  • toujours un flottant si vous utilisez une division à virgule flottante.

C'est simplement la mauvaise façon de tester la divisibilité.

0 votes

0 % 5 == 0 serait également Vrai, mais zéro n'est pas un multiple exact de zéro.

6 votes

@Fusion 0 == 0*5

0 votes

@Chris_Rands Mettez cela dans une réponse, les gens qui font du code-golf (comme moi) seraient très heureux. En fait, je suis venu ici chercher une réponse golfée comme celle-ci.

15voto

Pankaj Prakash Points 758

Vous pouvez simplement utiliser l'opérateur de modulus % pour vérifier la divisibilité.
Par exemple: n % 2 == 0 signifie que n est exactement divisible par 2 et n % 2 != 0 signifie que n n'est pas exactement divisible par 2.

1voto

Lordferrous Points 628

Vous pouvez utiliser l'opérateur % pour vérifier la divisibilité d'un nombre donné

Le code pour vérifier si un nombre donné est divisible par 3 ou 5 lorsque le nombre est inférieur à 1000 est le suivant :

n=0
while n<1000:
    if n%3==0 or n%5==0:
        print n,'est un multiple de 3 ou de 5'
    n=n+1

1voto

Bennett Jester Points 11

Ce code semble faire ce que vous demandez.

for value in range(1,1000):
    if value % 3 == 0 or value % 5 == 0:
        print(value)

Ou quelque chose comme ça

for value in range(1,1000):
    if value % 3 == 0 or value % 5 == 0:
        some_list.append(value)

Ou n'importe quoi d'autre.

1 votes

Pour répondre à votre question : sélectionnez et maintenez la touche Ctrl enfoncée + K pour indenter. Je l'ai fait pour vous cette fois-ci.

1voto

brandon gossman Points 11

J'ai eu la même approche. Parce que je ne comprenais pas comment utiliser l'opérateur de module (%)

6 % 3 == 0
  • Cela signifie que si vous divisez 6 par 3, vous n'aurez pas de reste, 3 est un facteur de 6.

Maintenant, vous devez le relier à votre problème donné.

if n % 3 == 0
  • Cela dit, si mon nombre (n) est divisible par 3 laissant un reste de 0.

Ajoutez votre instruction then (print, return) et continuez votre

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X