Ich entschuldige mich, wenn ich dies nicht ordnungsgemäß betitelt habe, aber ich habe Probleme, den folgenden Code auszuführen. Die Parameter der for-Schleife scheinen zumindest ein Teil des Problems zu sein. Wenn ich in der for-Schleife "limit" für "num" einsetze, um "für j im Bereich (1, limit)" zu erhalten, wird die Schleife ausgeführt und gibt die gewünschte Ausgabe an. Aber mit num anstelle von limit, sollte ich in der Lage sein, Iterationen der Schleife genauer zu steuern, aber es wird nicht abgeschlossen, zeigt aber keinen Fehler.Python: Loop-Parameter
from collections import Counter
limit = int(input('What number do you want to factor?'))
num = limit
factors = []
while num != 1:
for j in range(2, num):
if (num % j == 0):
num = num // j
factors.append(j)
break
factorEnum = Counter(factors)
print(factors)
print(factorEnum)
Der Zweck des Codes besteht darin, eine Primfaktorzerlegung einer gegebenen Zahl zu erzeugen. Zum Beispiel sind für die Zahl 28 die Primfaktoren {2, 7}, aber ich suche nach einer Primfaktorzerlegung, die {2, 2, 7} wäre. Dieser Code ist Teil eines anderen Skripts, das nach dem kleinsten gemeinsamen Vielfachen eines Zahlenbereichs sucht (z. B. 1 - 40). Dies ist ein Problem von ProjectEuler.
'if (num% j == 0):' Wenn das nicht wahr ist, änderst du 'num' nicht, damit deine Schleife für immer läuft. Und angenommen, dass 'num' 2 ist, dann' für j im Bereich (2, num) 'nicht läuft, wird num nicht verringert und das Gleiche passiert. – tdelaney
Fügen Sie ein paar Drucke hinzu und Sie werden sehen, wo es schief geht. Besser noch, führe es im Debugger 'pdb3' aus. – tdelaney
@tdelaney Das wäre nur wahr, wenn der Wert von 'j' zu irgendeinem Zeitpunkt nicht gleich 'num' wäre. Selbst wenn die Zahl prim wäre, würde sie immer noch durchlaufen, bis 'j == num' und 'num' auf 'num' // 'j' gesetzt würde, was 1 wäre. Dann beendet die break-Anweisung die for-Schleife und die Der Wert von 'num' ist 1 und verlässt die while-Schleife. ... Ich denke. – KhromRol