Primzahl in Python?

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.

Woher ich das weiß:Hobby
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.