Ich habe ein Programm erstellt, das erfolgreich erkennt, ob eine Zahl prim ist, oder nicht, es wird auch eine Liste der Faktoren der Zahl zurückgeben, wenn es nicht ist, aber dieser Teil ist nicht erfolgreich.Python: Falsche Ausgabe und ValueError: Prime Factors Creator
ist hier mein Code:
def prime_num():
num = int(input("Give me a number...: "))
prime = True
if num == 1:
prime = False
elif num == 2:
prime = True
for x in range(2, num):
if num % x == 0:
prime = False
break
if prime == False:
print("That's not a prime number!")
factors(num)
elif prime == True:
print("That's a prime number!")
def factors(num):
factors = []
for x in range(1, num+1):
if num % x == 0:
factors.append(x)
print("The factors for " + str(num) + " are: ", factors)
for x in factors:
for y in range(1, x):
if x % y == 0:
factors.remove(x)
print("The prime factors for " + str(num) + " are: ", factors)
Wenn ich diese Funktion mit einem "num" Wert von 25 ich diese Ausgabe zu erhalten ...
prime_num()
Give me a number...: 25
That's not a prime number!
The factors for 25 are: [1, 5, 25]
The prime factors for 25 are: [1, 25]
, die nicht die korrekte Ausgabe ist Für Primfaktoren möchte ich nur, dass es zurückkehrt: [5] (Ich bin nicht besorgt über die Vielzahl der Faktoren zu diesem Zeitpunkt)
Allerdings, wenn ich die Nummer 50 versuche, wie meine "num". Ich erhalte diese Ausgabe mit einem Valueerror:
prime_num()
Give me a number...: 50
That's not a prime number!
The factors for 50 are: [1, 2, 5, 10, 25, 50]
Traceback (most recent call last):
File "<ipython-input-19-12c785465e2a>", line 1, in <module>
prime_num()
File "C:/Users/x/Desktop/Python/Python Practice/primes.py", line 25, in prime_num
factors(num)
File "C:/Users/x/Desktop/Python/Python Practice/primes.py", line 40, in factors
factors.remove(x)
ValueError: list.remove(x): x not in list
Ich weiß, das bedeutet, irgendwie mein x ist nicht in Faktoren, aber ich bin nicht sicher, wie bedenken, dass ich speziell durch Faktoren laufen bin.
Beachten Sie, dass beim Löschen von Werten aus einer Liste beim Durchlaufen derselben Liste einige Elemente übersprungen werden. Iterieren Sie stattdessen eine Kopie: 'für x in Faktoren [:]'. –