Primzahl in Python?
Hallo,
ich bin noch Anfänger im Programmieren und sitze an einer Aufgabe fest. Das Programm soll mir die Werte True oder False geben, wenn es eine Primzahl ist oder nicht. Ich habe die Aufgabe soweit gelöst, aber bei 2 gibt er mir False heraus.
Ich finde den Fehler nicht. Könnte mir jemand erklären, woran es liegt?
Hier einmal mein Code:
import sys
zahl = int(sys.argv[1])
n = 2
if zahl <= 1:
print(False)
elif zahl % n == 0:
while n <= zahl:
n += 1
print(False)
else:
print(True)
5 Antworten
import sys
zahl = int(sys.argv[1])
# Nehmen wir erst einmal an, es sei eine Primzahl
# und dann schauen wir, ob wir einen Grund finden
# warum dies doch nicht so ist.
ist_primzahl = True
# Erster Grund: Die Zahl ist kleiner oder gleich 1
if zahl <= 1:
ist_primzahl = False
# Falls das nicht so ist, müssen wir genauer schauen
else:
# Gehe durch alle Zahlen ab 2, die kleiner sind als die
# Zahl selbst und checke, ob die Zahl durch diese
# Testzahl i teilbar ist
for i in range(2, zahl):
if zahl % i == 0:
ist_primzahl = False
# Falls ja, muss man nicht weiter
# machen mit der for-Schleife
break
# Gib dein Ergebnis aus
print(ist_primzahl)
Ich hoffe dieses Code-Beispiel, welches ich versucht habe so nah an deinem Code zu lassen wie möglich, hilft dir zu verstehen, wie man dieses Problem löst.
Die 2 wird hier als True herauskommen, weil eine for-Schleife, die die range(2, 2) abarbeitet, nicht ein einziges Mal ausgeführt werden wird.
Hinweis: Noch besser wäre es, wenn du die for-Schleife nicht für alle Zahlen kleiner als "zahl" laufen lässt, sondern nur bis zur Wurzel der Zahl! Denk mal darüber nach, wieso das so ist.
nehm dir mal ein zettel und stift und folge deinen anweisungen
while n <= zahl:
n += 1
print(False)
ist doch kompletter unsinn
und gewöhne dir codeblock formatierung an .
das ließt sich so als denkest du das eine zahl eine primzahl ist wenn sie nur nicht durch 2 teilbar ist .
def Primzahl(Nr:int) :
'''Prüft, ob Nr eine Primzahl ist.
'''
if type(Nr) != int :
if type(Nr) != float :
raise TypeError('Nr muss ein int sein.')
else :
Nr = round(Nr)
n = Nr
a = []
for x in range(2, n):
if n % x == 0:
a.append(x)
if len(a) == 0 :
return True
else :
return False, tuple(a), len(a)
Ich hatte diese Funktion schon vorher.
elif zahl % n == 0:
Hier überprüfst du, ob 2 durch 2 teilbar ist.
while n <= zahl:
n += 1
Wenn ja führst du diese Sinnlosschleife aus
print(False)
und gibst dein "false" aus
Kürzen wir das Ganze ab:
Head to the basics.