While-Schleife Beispiel
x = y // 2 # For some y > 1
while x > 1:
if y % x == 0: # Remainder
print(y, 'has factor', x)
break # Skip else
x -= 1
else: # Normal exit
print(y, 'is prime')
Dies ist ein Beispiel für das Verständnis der while-Schleife in ein Buch, ich lese, ich verstehe nicht ganz, warum ein Boden-division und dann y, x%? Kann mir bitte jemand erklären, dieses Stück code, was es tut?
Dank!
- Hinweis an die Redaktion, die else-Klausel sollte inline mit der while-Anweisung, nicht die wenn-Anweisung.
- Fest, dass für Sie.
- das code nicht in Python, C 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Programm druckt mindestens ein Faktor eine ganze Zahl y, oder, wenn es keine Faktoren (andere als sich selbst und 1), Drucke, y ist eine Primzahl.
Verwendet es die variable x, um zu versuchen alle möglichen Faktoren größer als eins. Es beginnt am Boden von y geteilt durch 2, weil keine Zahl, die größer als die Hälfte des y könnte ein Faktor sein. Mit der normalen division eher als Fußboden-division konnte Euch einen Bruchteil Wert, wenn y ungerade ist. (Eine noch bessere Lösung ist die Quadratwurzel von y, wenn y nicht prim, einer seiner Faktoren werden weniger als oder gleich der Quadratwurzel.)
Innerhalb der Schleife, prüft es, y, x%, das ist der Rest nach der Division von y durch x. Wenn der Rest null ist, dass bedeutet, dass x ein Faktor von y, und druckt es.
In der else-Klausel ausgeführt wird am Ende der Schleife, wenn ein Faktor gefunden wird, in welchem Fall die "Pause" springt aus der Schleife und der else-Klausel. Also entweder ein Faktor gefunden wird, oder es ist prime.
Hier der verbesserte code mit dem Einzug behoben:
Dies ist eine lahme primality test.
% ist die mod-operator. Es führt eine division aus und gibt den Rest eher als das Ergebnis der division. Zum Beispiel, 5 //2 == 2 und 5 % 2 == 1.
Kommentierte:
Den code einfach geprüft, ob die Quadratwurzel von x erreicht wurde. Beachten Sie, dass Sie können überprüfen, die primality einer Reihe mit der überprüfung, ob die zahlen von 2 bis zur Wurzel von x teilt x perfekt (ohne Rest).
die Logik ist:
wenn y modulo x ist 0, es bedeutet, dass x ist ein dividor von y, also y ein Faktor. drucken, und brechen aus der Schleife.
wenn nicht, verringert x um 1, und versuchen Sie es erneut.
aber manche Dinge sind kaputt-code:
Für jede Zahl (x) ist keine Primzahl, es wäre ein Faktor größer als 1 und kleiner als (x/2).
9 = 3*3
Die Logik zum iterieren durch alle zahlen <= x/2 und prüfen Sie, ob die Anzahl teilt.
Ich denke, dass das Programm versucht, um den größten Primfaktor von y.
Wenn y ist eine Primzahl Faktor druckt er diese als gut.
x = y //2
ist für die Prüfung der zahlen in der Reihe x:2..y/2
.Ein besserer Ansatz wäre zu testen, nur die zahlen x:
2..sqrt(y)
den % bezeichnet ein Modul, das gibt Ihnen den Rest der division...
und dieser code überprüft, der für prime-Y und auch überprüft, ob Y einen Multiplikator von x...
x = y //2 #x=die division oder modulo y , 2
während x > 1: #Sie möchten überprüfen, ob dies ist ein Geschäftsbereich Ergebnis oder ein Modul
wenn y % x == 0: # wenn y einen Multiplikator von x
else: # diese Zeile wird ausgeführt, wenn das wihle erreicht x > 1 und nicht brechen
print(y, 'ist prim')
also, wenn die y-Multiplikator von x, es wird decreament x und die Schleife weiter
sonst wird es print y ist eine Primzahl