2011-11-03 40 views
62

Ho bisogno di verificare se ogni numero da 1 a 1000 è un multiplo di 3 o un multiplo di 5. Il modo in cui pensavo di fare questo sarebbe stato dividere il numero per 3, e se il risultato è un numero intero allora sarebbe un multiplo di 3. Lo stesso con 5.Come si controlla se un numero è divisibile per un altro numero (Python)?

Come verificare se il numero è un numero intero?

qui è il mio codice corrente:

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

In Python 2.x, divisione intera cede sempre un numero intero. –

+9

Si dovrebbe stampare "Fizz" e "Buzz" – wim

+7

Project Euler Problema 1? –

risposta

147

A tale scopo, utilizza l'operatore modulo, %

n % k == 0 

valutata vera se e solo se n è un multiplo esatto di k. In matematica elementare questo è noto come il resto di una divisione.

Nella attuale approccio si esegue una divisione e il risultato sarà o

  • sempre un intero se si utilizza divisione intera, o
  • sempre un galleggiante se si utilizza la divisione in virgola mobile.

È solo il modo sbagliato di testare la divisibilità.

+1

@Taimur ha risposto aggiornato –

+0

Ottimo suggerimento! Grazie – sidonaldson

+0

'not (n% k)' sarebbe un'alternativa meno leggibile –

-4

Il modo più semplice è verificare se un numero è un numero intero è int(x) == x. Altrimenti, quello che ha detto David Heffernan.

-2

Per i numeri piccoli n%3 == 0 andrà bene. Per i numeri molto grandi propongo di calcolare la somma croce e poi controllare se la somma croce è un multiplo di 3:

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

Il calcolo della somma incrociata e l'utilizzo dell'operazione del modulo sono molto più veloci rispetto all'utilizzo diretto del modulo? In tal caso, non dovresti chiamare la tua funzione in modo ricorsivo fino a quando il numero è abbastanza "piccolo"? – honk

0

È possibile utilizzare % dell'operatore per controllare divisiblity di un dato numero

Il codice per verificare se è stato dato no. è divisibile per 3 o 5 quando no. inferiore a 1000 è il seguente:

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

Si può semplicemente utilizzare % operatore modulo per controllare la divisibilità.
Per esempio: n % 2 == 0 significa n è esattamente divisibile per 2 e n % 2 != 0 significa n non è esattamente divisibile per 2.

Si può anche avere uno sguardo alla operators utilizzato nella programmazione.

-3

Prova questo ...

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

Questo è per chi vuole codificare java –

0

Questo codice sembra di fare quello che stai chiedendo.

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

O qualcosa di simile

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

o un qualsiasi numero di cose.

+0

per rispondere alla tua domanda: select e ctrl + K indent. L'ho fatto per te per questa volta. –

-4

Jinja2 modello 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

È stata richiesta una soluzione in Python. –

0

ho avuto lo stesso approccio. Perché non ho capito come usare l'operatore module (%).

6% 3 = 0 * Questo significa che se dividere 6 da 3 non si avrà un resto, 3 è un fattore 6.

Ora dovete mettere in relazione al vostro dato problema.

se n% 3 == 0 * Questo sta dicendo, se il mio numero (n) è divisibile per 3 lasciando uno 0 resto.

Aggiungere la vostra dichiarazione di allora (stampa, andata e ritorno) e continuare la

Problemi correlati