Wie prüft man, ob eine Zahl durch eine andere Zahl teilbar ist (Python)?


111

Ich muss testen, ob jede Zahl von 1 bis 1000 ein Vielfaches von 3 oder ein Vielfaches von 5 ist. Ich dachte, ich würde dies tun, indem ich die Zahl durch 3 dividiere, und wenn das Ergebnis eine ganze Zahl ist, würde es dies tun sei ein Vielfaches von 3. Gleiches gilt für 5.

Wie teste ich, ob die Zahl eine ganze Zahl ist?

Hier ist mein aktueller Code:

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

2
In Python 2.x ergibt die Ganzzahldivision immer eine Ganzzahl.
Russell Borogove

14
Sie sollten "Fizz" und "Buzz"
drucken

9
Projekt Euler Problem 1?
Ashutosh Dave

Antworten:


224

Sie tun dies mit dem Moduloperator, %

n % k == 0

bewertet true genau dann, wenn nes sich um ein genaues Vielfaches von handelt k. In der Elementarmathematik wird dies als Rest einer Division bezeichnet.

In Ihrem aktuellen Ansatz führen Sie eine Division durch und das Ergebnis ist entweder

  • Immer eine Ganzzahl, wenn Sie die Ganzzahldivision verwenden, oder
  • Immer ein Gleitkomma, wenn Sie die Gleitkommadivision verwenden.

Es ist einfach der falsche Weg, um die Teilbarkeit zu testen.


0% 5 == 0 wäre ebenfalls wahr, aber Null ist kein genaues Vielfaches von Null.
Fusion

@ Fusion0 == 0*5
David Heffernan

@Chris_Rands Geben Sie das in eine Antwort, Leute, die Code-Golf spielen (wie ich), wären sehr glücklich. Tatsächlich bin ich hierher gekommen, um nach einer solchen Antwort zu suchen.
MilkyWay90

5

Sie können einfach den %Modulus-Operator verwenden, um die Teilbarkeit zu überprüfen.
Zum Beispiel: n % 2 == 0bedeutet, dass n genau durch 2 teilbar ist und n % 2 != 0dass n nicht genau durch 2 teilbar ist.


1

Ich hatte den gleichen Ansatz. Weil ich nicht verstanden habe, wie man den Moduloperator (%) verwendet.

6% 3 = 0 * Dies bedeutet, wenn Sie 6 durch 3 teilen, haben Sie keinen Rest, 3 ist ein Faktor von 6.

Jetzt müssen Sie es auf Ihr gegebenes Problem beziehen.

if n% 3 == 0 * Dies bedeutet, wenn meine Zahl (n) durch 3 teilbar ist und ein Rest von 0 übrig bleibt.

Fügen Sie Ihre then-Anweisung (print, return) hinzu und fahren Sie mit Ihrer Anweisung fort


0

Sie können den Operator% verwenden Sie die Teilbarkeit einer bestimmten Zahl überprüfen

Der Code, um zu überprüfen, ob nein. ist teilbar durch 3 oder 5 wenn nein. weniger als 1000 ist unten angegeben:

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

0

Dieser Code scheint das zu tun, wonach Sie fragen.

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

Oder so ähnlich

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

Oder eine beliebige Anzahl von Dingen.


Um Ihre Frage zu beantworten: Wählen Sie und drücken Sie Strg + K Einrückungen. Ich habe das für diese Zeit für dich getan.
Jean-François Fabre

-2
a = 1400
a1 = 5
a2 = 3

b= str(a/a1)
b1 = str(a/a2)
c =b[(len(b)-2):len(b)]
c1 =b[(len(b1)-2):len(b1)]
if c == ".0":
    print("yeah for 5!")
if c1 == ".0":
    print("yeah for 3!")

1
Es ist besser zu erklären, welche Korrektur Sie gegeben haben und warum es funktioniert hat
Chans

1
Dies ist KEIN guter Weg, um die Teilbarkeit zu testen: Eine Float-Division durchzuführen, in einen String zu konvertieren und dann String-Manipulationen durchzuführen, um festzustellen, ob der Bruchteil (wörtlich) ".0" ist, ist zumindest ineffizient und möglicherweise falsch, abhängig von die Gleitkomma-Implementierung und den Code, der die Konvertierungen durchführt.
NickD

Versuchen Sie es beispielsweise x=10000000000000000; b = str(x/(x-1)); bim Python-Interpreter.
NickD

-3

Für kleine Zahlen ist n%3 == 0das in Ordnung. Für sehr große Zahlen schlage ich vor, zuerst die Quersumme zu berechnen und dann zu prüfen, ob die Quersumme ein Vielfaches von 3 ist:

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

2
Ist die Berechnung der Quersumme und die Verwendung der Moduloperation wirklich schneller als die direkte Verwendung der Moduloperation? Wenn ja, sollten Sie Ihre Funktion nicht rekursiv aufrufen, bis die Nummer "klein" genug ist?
Hupen

-7

Versuche dies ...

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);    
  }
}

Ich bezweifle, dass Java Python ist, daher ist dies keine gültige Antwort
MilkyWay90

Ihre Antwort ist nicht relevant für die Frage
Varadaraju G

-7

jinja2 template 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>

5
Es wurde nach einer Lösung in Python gefragt.
jmd_dk

1
Ihre Antwort ist nicht relevant für die Frage
Varadaraju G

-8

Am einfachsten ist es zu testen, ob eine Zahl eine ganze Zahl ist int(x) == x. Ansonsten, was David Heffernan gesagt hat.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.