2011-11-03 41 views
62

Necesito comprobar si cada número del 1 al 1000 es un múltiplo de 3 o un múltiplo de 5. La forma en que pensé que haría esto sería dividir el número por 3, y si el resultado es un número entero, entonces sería un múltiplo de 3. 5. lo mismo con¿Cómo se verifica si un número es divisible por otro número (Python)?

¿Cómo se prueba si el número es un entero?

aquí es mi código actual:

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 
+1

En Python 2.x, la división entera siempre produce un entero. –

+9

Deberías estar imprimiendo "Fizz" y "Buzz" – wim

+7

Proyecto Euler Problema 1? –

Respuesta

147

Para ello, utilice el operador de módulo, %

n % k == 0 

evalúa verdadero si y sólo si n es un múltiplo exacto de k. En matemáticas elementales, esto se conoce como el resto de una división.

En su enfoque actual se realiza una división y el resultado será un

  • siempre un entero si se utiliza la división entera, o
  • siempre un flotador si se utilizará una división de coma.

Es la forma incorrecta de realizar la división de las pruebas.

+1

@Taimur respondió actualizado –

+0

¡Un gran consejo! Gracias – sidonaldson

+0

'not (n% k)' sería una alternativa menos legible –

-4

La forma más sencilla es probar si un número es un entero se int(x) == x. De lo contrario, lo que dijo David Heffernan.

-2

Para pequeñas cantidades n%3 == 0 va a estar bien. Para un gran número propongo para calcular la suma cruzada primero y luego comprobar si la suma cruz es un múltiplo de 3:

def is_divisible_by_3(number): 
    if sum(map(int, str(number))) % 3 != 0: 
     my_bool = False 
    return my_bool 
+1

¿Está calculando la suma cruzada y usando la operación del módulo realmente más rápido que usando directamente la operación del módulo? Si es así, ¿no debería llamar a su función recursivamente hasta que el número sea lo suficientemente "pequeño"? – honk

0

Usted puede utilizar % del operador para comprobar divisiblity de un número dado

El código para verificar si se da no. es divisible por 3 o 5 cuando no. menos de 1000 es la siguiente:

n=0 
while n<1000: 
    if n%3==0 or n%5==0: 
     print n,'is multiple of 3 or 5' 
    n=n+1 
1

Usted puede simplemente utilizar % operador módulo para comprobar la divisibilidad.
Por ejemplo: n % 2 == 0 significa n es exactamente divisible por 2 y n % 2 != 0 significa n no es exactamente divisible por 2.

También puede echar un vistazo a la operators utilizado en la programación.

-3

Prueba esto ...

public class Solution { 

    public static void main(String[] args) { 
    long t = 1000; 
    long sum = 0; 

    for(int i = 1; i<t; i++){ 
      if(i%3 == 0 || i%5 == 0){ 
       sum = sum + i; 
      } 
     } 
     System.out.println(sum);  
    } 
} 
+0

Esto es para quién va a codificar java –

0

Este código aparece para hacer lo que está pidiendo.

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

O algo así

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

o cualquier número de cosas.

+0

para responder a su pregunta: select and ctrl + K indents. He hecho eso por ti esta vez. –

-4

Jinja2 plantilla fizzbuz:

<form> 
    <ol> 
    {% for x in range(1,n+1) %} 
     {% set fizzbuzz_rpm = x %} 
     {% if x % 3 == 0 and x % 5 == 0 %} 
     {% set fizzbuzz_rpm="FizzBuzz" %} 
     {% elif x % 3 == 0 %} 
      {% set fizzbuzz_rpm="Fizz" %} 
     {% elif x %5 == 0 %} 
      {% set fizzbuzz_rpm="Buzz" %} 
     {% endif %} 
     <li>{{fizzbuzz_rpm}}</li> 
    {% endfor %} 
    </ol> 
</form> 
+3

Se solicitó una solución en Python. –

0

que tenía el mismo enfoque. Porque no entendí cómo usar el operador del módulo (%).

6% 3 = 0 * Esto significa que si se divide por 3 6 no tendrá un resto, 3 es un factor de 6.

Ahora hay que relacionarlo con su problema dado.

if n% 3 == 0 * Esto está diciendo, si mi número (n) es divisible entre 3 dejando un 0 resto.

Añadir su estado de cuenta a continuación (de impresión, de retorno) y continúe con su

Cuestiones relacionadas