In diesem Artikel wird eine Einstiegs-Aufgabe gestellt, die die Entwicklung eines "Primzahlen-Checker"-Programms vorsieht.

Eine kurze Einführung in die Blog Artikel zum Thema "Einstieg in die Programmierung mit Python" findest du hier.


Aufgabenstellung

Es soll ein kleines Konsolenprogramm entwickelt werden, in dem der Anwender zunächst eine Zahl eingeben kann. Anschließend prüft das Programm, ob diese Zahl eine Primzahl ist oder nicht.

Ein möglicher Lösungsansatz


def primzahl_checker():
    eingabe = input("Bitte gebe eine Zahl an: ")
    
    try:
        zahl = int(eingabe)
    except:
        print("Fehler: Du hast wohl keine Zahl eingegeben...")
    else:
    	ist_eine_primzahl = True
        
        for i in range(2, zahl):
            if zahl % i == 0:
                ist_eine_primzahl = False
                break
        
        if ist_eine_primzahl:
            print("Es ist eine Primzahl!")
        else:
            print("Es ist keine Primzahl!")

primzahl_checker()

In der ersten Zeile (mit "def") wird die Funktion definiert, in der die folgenden Anweisungen untergeordnet sind. Diese Funktion wird am Ende des Programmes in der letzten Zeile aufgerufen. Der Sinn der Auslagerung der Programmierung in eine eigene Funktion ist die Wiederverwendbarkeit - diese Funktion kann nun ohne neu programmiert zu werden beliebig häufig verwendet werden.

In der ersten Zeile in der Funktion wird der Anwender nach einer Zahl gefragt, für die geprüft werden soll, ob es sich um eine Primzahl handelt oder nicht. Im folgenden try-Block wird die Eingabe zu einem Integer konvergiert. Hintergrund ist, dass durch die input-Anweisung nicht nur Zahlen, sondern auch Buchstaben erfasst werden können. Die input-Funktion gibt also immer Strings zurück. Da bei der Umwandlung von String zu Integer Fehler auftreten können, zum Beispiel dann, wenn auch Buchstaben versucht werden umzuwandeln, werden diese Fehler im try-except-Block abgefangen. Sollte die Eingabe nicht in eine Zahl umgewandelt werden können, wird dem Anwender eine entsprechende Fehlermeldung angezeigt. Nur wenn es bei der Umwandlung zu keinem Fehler gekommen ist, werden die folgenden Anweisungen ausgeführt (mehr Infos im Blog-Artikel "Python: try, except, else und finally").

Nun wird die temporäre Variable "ist_eine_primzahl" erstellt, die zunächst mit True gefüllt wird. Es folgt eine for-Schleife, in der alle Zahlen von zwei, bis zur eingegebenen Zahl - 1 behandelt werden. Die in der for-Schleife untergeordneten Anweisungen werden zum Beispiel für die Zahlen 2, 3, 4, 5, 6 und 7 ausgeführt, wenn der Anwender prüfen möchte, ob die Zahl 8 eine Primzahl ist.

Innerhalb der for-Schleife wird für jeden Wert überprüft, ob die zu testende Zahl glatt durch den Wert teilbar ist. Dies erfolgt mit dem %-Statement. a % b gibt den Rest zurück, der bei der Division von a durch b übrig bleibt. 6 % 5 ergibt also 1. Wenn der Rest gleich 0 ist, dann ist die zu testende Zahl glatt durch den Wert der for-Schleife teilbar - es handelt sich dann also nicht um eine Primzahl. Die temporäre Variable wird daher auf False gesetzt, und mit break wird die for-Schleife verlassen.

Alternativ hätte statt "zahl % i == 0" auch getestet werden können, ob zahl geteilt durch i dem selben Ergebnis entspricht, wie der glatte Wert von zahl geteilt durch i. In Python könnte dies zum Beispiel so dargestellt werden: "zahl / i == zahl // i" oder so: "zahl / i == int(zahl / i)"

In den letzten vier Anweisungen innerhalb des else-Blocks wird - abhängig vom Wert der temporäre Variable - angezeigt, dass es sich um eine bzw. um keine Primzahl handelt.