3.2.1 Ganzzahl gerade oder ungerade

Definition
Begriffe: Gerade und ungerade Ganzzahl
  • Eine Ganzzahl ist gerade, wenn beim ganzzahligen Teilen der Zahl durch 2 der Rest 0 ist (beispielsweise ist 24%2 gleich 0).
  • Da 0 beim ganzahligen Teilen durch 2 den Rest 0 hat, ist 0 eine gerade Ganzzahl.
  • Eine Ganzzahl ist ungerade, wenn beim ganzzahligen Teilen der Zahl durch 2 der Rest 1 ist (beispielsweise ist 13%2 gleich 1).

Das Programm »ganzzahl1.py«

Das Programm soll das Folgende leisten:

  • (E) Eingabe einer Ganzzahl.
  • (V) Verarbeitung, indem geprüft wird, ob die Ganzzahl gerade oder ungerade ist.
  • (A) Ausgabe des Prüfergebnisses in einer Zeichenkette.

Zum Prüfen – ob eine vom Benutzer eingegebene Ganzzahl eine gerade oder ungerade Zahl ist – ist der in der Abbildung1 dargestellte Algorithmus gegeben.

Bild 45
Abbildung 1: Algorithmus mit mehrfacher Auswahl

Der Algorithmus wiederum liegt der Callback-Funktion »pruefen« des Programms zugrunde.

  • Den Kern der Callback-Funktion »pruefen« bildet die if-else-Anweisung (mehrfache Auswahl) mit zwei Bedingungszweigen.
Quelltext der Callback-Funktion »pruefen«
# Callback-Funktion
def pruefen():
    try:
        zahl=int(entry.get())
        if zahl%2==0:
            label2.config(text=f"{zahl} ist gerade.")
        else:
            label2.config(text=f"{zahl} ist ungerade.")               
    except ValueError:
        label2.config(text="Falsche Eingabe!")
    entry.delete(0, tk.END)  

Erklärungen zum Quelltext
2. bis 11. Zeile Die Callback-Funktion »pruefen« wird deklariert.
3. bis 10. Zeile Durch »try« und »except« erfolgt eine Ausnahmebehandlung.
4. Zeile Der Variable »zahl« wird die vom Benutzer eingegebene Zeichenkette durch die Funktion »int()« als Ganzzahl zugewiesen.
5. bis 8. Zeile Die if-else-Anweisung ist eine mehrfache Auswahl (Selektion) mit zwei Bedingungszweigen:
  • dem der geraden Ganzzahl
  • dem der ungeraden Ganzzahl
5. Zeile Der Modulo-Operator »%« ermittelt den Rest beim Teilen einer Ganzzahl durch eine andere.
6. Zeile Falls »zahl« beim ganzahligen Teilen durch 2 den Rest 0 ergibt, wird der f-String »f"{zahl} ist gerade."« ausgegeben.
Hat beispielsweise die Variable »zahl« den Wert 12, dann wird die Zeichenkette »12 ist gerade."« ausgegeben.
8. Zeile Ansonsten wird der f-String »f"{zahl} ist ungerade.« ausgegeben.
Hat beispielsweise die Variable »zahl« den Wert 13, dann wird die Zeichenkette »13 ist ungerade.« ausgegeben.
11. Zeile Der Inhalt des Eingebefensters wird gelöscht.

In der Abbildung 2 ist eine mögliche grafische Benutzeroberfläche – das Hauptfenster mit Widgets – dargestellt.

Bild 46
Abbildung 2: Hauptfenster mit Widgets
Übung

Aufgabe A16

Implementiere ein Programm »ganzzahl1.py« am Computer.

  • Das Programm soll aus einer grafischen Benutzeroberfläche – dem Hauptfenster mit Widgets – bestehen.
  • Und das Programm enthält die Callback-Funktion »pruefen«.

Führe das Programm u. a. mit folgenden Eingaben aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht:

  • 285
  • 9872
  • 0
  • -9
  • +63
  • Was geschieht bei der Eingabe 1.9e-2?

Zehner-, Hunderter- und Tausenderzahl

Definition
Begriffe: Zehner- Hunderter- und Tausenderzahl

Eine Ganzzahl ist eine:

  • Zehnerzahl, wenn die letzte Ziffer der Zahl eine Null ist.
    Beispielsweise sind die Ganzzahlen -90, 30, 120, 0, -1230, 987610 und 53070 Zehnerzahlen.
  • Hunterterzahl, wenn die letzten zwei Ziffern der Zahl Nullen sind.
    Beispielsweise sind die Ganzzahlen -700, 330, 100, -1230, 830500 und 4500 Hunterterzahlen.
  • Tausenderzahl, wenn die letzten drei Ziffern der Zahl Nullen sind.
    Beispielsweise sind die Ganzzahlen -1000, 4056000, 12000, -2000, 9000 und 24000 Tausenderzahlen.

Programm »ganzzahl2.py«

Zum Prüfen – ob eine vom Benutzer eingegebene Ganzzahl eine Tausender-, Hunderter- oder Zehnerzahl ist – ist die Callback-Funktion »pruefen« gegeben.

Interessant an der Callback-Funktion »pruefen« sind die:

  • if-elif-elif-else-Anweisung (mehrfache Auswahl) mit vier Bedingungszweigen
  • Reihenfolge der Bedingungen innerhalb der if-elif-elif-else-Anweisung
Quelltext der Callback-Funktion »pruefen«
# Callback-Funktion
def pruefen():
    try:
        zahl=int(entry.get())
        if zahl%1000==0:
            label2.config(text=f"{zahl} ist Tausenderzahl.")
        elif zahl%100==0:
            label2.config(text=f"{zahl} ist Hunderterzahl.")
        elif zahl%10==0:
            label2.config(text=f"{zahl} ist Zehnerzahl.")        
        else:
            label2.config(\
                text=f"{zahl} ist keine der Zahlen.")                    
    except ValueError:
        label2.config(text="Falsche Eingabe!")
    entry.delete(0, tk.END)

Erklärungen zum Quelltext
2. bis 16. Zeile Die Definition der Callback-Funktion »pruefen« erfolgt.
3. bis 15. Zeile Durch »try« und »except« erfolgt die Ausnahmebehandlung.
4. Zeile Der Variable »zahl« wird die vom Benutzer eingegebene Zeichenkette durch die Funktion »int()« als Ganzzahl zugewiesen.
5. bis 13. Zeile Geprüft wird, ob die vom Benutzer eingegebene Ganzzahl eine Tausender-, Hunderter- oder Zehnerzahl ist.
5., 7. und 9. Zeile In den Bedingung wird geprüft, ob die eingegebene Ganzzahl ohne Rest durch 1000, 100 oder 10 teilbar ist:
  • Der Modulo-Operator »%« ermittelt den Rest beim Teilen einer Ganzzahl durch eine andere.
6., 8., 10. und 13. Zeile Ausgegeben werden die Ergebnise des Prüfens in f-Strings.
16. Zeile Der Inhalt des Eingebefensters wird gelöscht.
Übung

Aufgabe A17

Implementiere ein Programm »ganzzahl2.py« am Computer.

  • Das Programm soll prüfen, ob die vom Benutzer eingegebene Ganzzahl eine Tausender-, Hunderter- oder Zehnerzahl ist.

Hinweis:

  • Da eine Tausender Zahl zugleich eine Hunderterzahl und Zehnerzahl ist, muss die Zahl nicht gesondert als Hunderter- und Zehnerzahl geprüft und ausgegeben werden.
  • Da eine Hunderterzahl zugleich eine Zehnerzahl ist, muss die Zahl nicht gesondert als Zehnerzahl geprüft und ausgegeben werden.

Führe das Programm u. a. mit folgenden Eingaben aus und teste, ob es fehlerfrei läuft und den gestellten Anforderungen entspricht:

  • 5000
  • -12300
  • 6
  • 5603000
  • 908020
  • -700
  • 0
  • 4567