Heim > Artikel > Backend-Entwicklung > Wie prüft man die Teilbarkeit in Python ohne die Fallstricke der Teilung?
Prüfung der Teilbarkeit in Python: Eine andere Perspektive
Bei der Aufgabe, festzustellen, ob eine Zahl durch eine andere teilbar ist, reagieren viele Entwickler instinktiv greifen Sie auf Division und Überprüfung des Restes zurück. Dieser Ansatz kann jedoch zu Fallstricken führen, insbesondere im Zusammenhang mit Pythons vielfältiger Interpretation der Division.
In Python 2.x ist das Standardverhalten eine ganzzahlige Division, die den Rest verwirft. Dies bedeutet, dass Divisionsoperatoren immer eine Ganzzahl ergeben, unabhängig davon, ob ein Rest ungleich Null vorhanden ist. Daher bietet die Verwendung von isinstance zum Testen einer Ganzzahl keine sinnvolle Unterscheidung.
In Python 3.x hingegen verwendet die Division standardmäßig Gleitkommaoperationen, wodurch selbst für Gleitkommawerte erzeugt werden ganze Zahlen. Folglich schlägt die Instanzprüfung auch dann fehl, wenn die Zahl im mathematischen Sinne teilbar ist.
Ein besserer Weg: Moduloperator zur Rettung
Ein effektiverer Ansatz ist um den Moduloperator % zu verwenden. Der Ausdruck n % k == 0 gibt genau dann True zurück, wenn n gleichmäßig durch k teilbar ist. Diese Methode geht direkt auf das Teilbarkeitskriterium ein, ohne die Mehrdeutigkeiten, die mit der Teilung einhergehen.
Beispiellösung
Ausgerüstet mit diesem Wissen ändern wir Ihren Code, um die Teilbarkeit korrekt zu testen:
<code class="python">n = 0 s = 0 while n < 1001: if (n % 3 == 0) or (n % 5 == 0): s += n n += 1</code>
Diese Lösung verwendet den Moduloperator, um die Teilbarkeit durch 3 und 5 zu prüfen und so effektiv Zahlen herauszufiltern, die eine der beiden Bedingungen erfüllen. Das Ergebnis ist eine präzisere und robustere Lösung für Ihr ursprüngliches Problem.
Das obige ist der detaillierte Inhalt vonWie prüft man die Teilbarkeit in Python ohne die Fallstricke der Teilung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!