04 Einseitige Bedingung und Debugging

Schummeln… äh… Debuggen lernen #

Zahlenraten mit dem Computer #

int zufallszahl = Random.randint(1, 6);
int userZahl = Input.readInt("Gib eine Zahl zwischen 1 und 6 ein:");
if(zufallszahl == userZahl) {
    println("Getroffen!");
}
println("Danke fürs Spielen!");
  1. In der Variable zufallszahl speichern wir eine Zufallszahl zwischen 1 und 6, die wir mit Random.randint(1, 6) erzeugen lassen.
  2. In der Variable userZahl speichern wir die Eingabe, zu der wir unser Nutzerin oder unseren Nutzer auffordern – ebenfalls als Zahl.
  3. Die Anweisung if überprüft, ob die beiden in den Variablen gespeicherten Zahlen gleich sind – der Ausdruck in der Klammer wird dazu zu einem Wahrheitswert ausgewertet.
  4. Die geschweiften Klammern ({ und }) begrenzen einen Codeblock. Zur besseren Übersicht solltest du solche Blöcke immer einrücken!
  5. Alle Anweisungen im Block, der nach der if-Anweisung anfängt, werden nur ausgeführt, wenn der ausgewertete Wahrheitswert true ist. Bei false wird der Block einfach übersprungen.
  6. Hier bedeutet das: nur wenn unsere Nutzerin oder unser Nutzer die richtige Zahl eingegeben hat, wird Getroffen! ausgegeben.
  7. Danke fürs Spielen! wird in jedem Fall am Bildschirm ausgegeben, weil es nach dem Block steht.
  8. Vergiss nicht, das Spiel einige Runden zu spielen!
from random import randint

zufallszahl = randint(1, 6)
user_zahl = int(input('Gib eine Zahl zwischen 1 und 6 ein: '))
if zufallszahl == user_zahl:
    print('Getroffen!')
print("Danke fürs Spielen!")
  1. In der Variable zufallszahl speichern wir eine Zufallszahl zwischen 1 und 6, die wir mit randint(1, 6) erzeugen lassen.
  2. In der Variable user_zahl speichern wir die Eingabe, zu der wir unser Nutzerin oder unseren Nutzer auffordern – ebenfalls als Zahl.
  3. Die Anweisung if überprüft, ob die beiden in den Variablen gespeicherten Zahlen gleich sind – der Ausdruck nach dem if wird dazu zu einem Wahrheitswert ausgewertet.
  4. Nach dem Doppelpunkt (:) wird ein neuer Codeblock erwartet. (Die Einrückung markiert einen solchen Codeblock.) Python-Programmiererinnen und -Programmierer rücken solche Blöcke um exakt vier Leerzeichen ein.
  5. Alle Anweisungen im Block, der nach der if-Anweisung anfängt, werden nur ausgeführt, wenn der ausgewertete Wahrheitswert True ist. Bei False wird der Block einfach übersprungen.
  6. Hier bedeutet das: nur wenn unsere Nutzerin oder unser Nutzer die richtige Zahl eingegeben hat, wird Getroffen! ausgegeben.
  7. Danke fürs Spielen! wird in jedem Fall am Bildschirm ausgegeben, weil es nach dem Block steht.
  8. Vergiss nicht, das Spiel einige Runden zu spielen!

Jetzt wird geschummelt debuggt! #

Wenn dein Programm gar nicht erst läuft, solltest du dir die Fehlermeldungen gut durchlesen – auch wenn die nicht immer sofort verständlich ist, kann sie doch oft weiterhelfen.

Wenn dein Programm läuft, aber nicht die Ergebnisse erzeugt, die du möchtest, solltest du die Programmlogik untersuchen.

Wäre es nicht hilfreich, sehen zu können, welche Werte in den Variablen abgespeichert sind? Dann könntest du immer gewinnen genau überprüfen, ob dein Programm wie erwartet funktioniert.

Breakpoint in Zeile 2

  1. Der rote Punkt neben Zeile zwei wird Breakpoint genannt. Du kannst ihn mit einem Mausklick erzeugen oder wieder löschen.
  2. Wenn ein Breakpoint gesetzt ist, wird das Programm bis zu dieser Stelle ausgeführt und hält dann an.
  3. Du kannst die Werte, die deine Variablen angenommen haben, ansehen.
  4. Nutze den Breakpoint, um einmal den Block hinter der Bedingung ausführen zu lassen, und ihn einmal zu überspringen!

Breakpoint in Zeile 4

  1. Der rote Punkt neben Zeile vier wird Breakpoint genannt. Du kannst ihn mit einem Mausklick erzeugen oder wieder löschen.
  2. Wenn ein Breakpoint gesetzt ist, hält das Programm im Debug-Modus an dieser Stelle an. (Den Debugmodus startest Du mit einem Klick auf den Käfer.)
  3. Du kannst die Werte, die deine Variablen angenommen haben, ansehen. (Falls du die Variablen nicht sehen kannst, wähle im Menü Ansicht den Punkt Variablen aus.)
  4. Nutze den Breakpoint, um einmal den Block hinter der Bedingung ausführen zu lassen, und ihn einmal zu überspringen!

Flashcards #

Was bedeutet einseite Bedingung? Warum einseitig?

In diesem Struktogramm sind zwei verschiedene Blöcke von Anweisungen vorgesehen, je nachdem ob eine Bedingung WAHR oder FALSCH ist:

Struktogramm

Bei der einseitigen Bedingung ist für den FALSCH-Fall einfach nichts vorgesehen – daher nur eine Seite:

Struktogramm

Welche drei Elemente brauche ich, um eine einseitig bedingte Anweisung zu programmieren?

Das Schlüsselwort if, die Überprüfung einer Bedingung (Ausdruck, der zu einem Wahrheitswert ausgewertet wird, hier: (punkte > 11)) und einen Block von Anweisungen, der im Wahrheitsfall ausgeführt wird (hier: println("Bestanden!");)

if (punkte > 11) {
    println("Bestanden!");
}

Das Schlüsselwort if, die Überprüfung einer Bedingung (Ausdruck, der zu einem Wahrheitswert ausgewertet wird, hier: punkte > 11) und (nach einem Doppelpunkt) einen Block von Anweisungen, der im Wahrheitsfall ausgeführt wird (hier: print('Bestanden!'))

if punkte > 11:
    print('Bestanden!')
Wie setze ich Breakpunkte, und wofür sind sie gut?
Mit der Maus kann ich am linken Rand neben dem Programmcode rote Punkte setzen – das sind die Breakpoints. Bei der Ausführung wird das Programm an dieser Stelle angehalten, und ich kann z.B. die Werte von Variablen ansehen. Das ist nützlich, um Fehler zu finden.
Mit der Maus kann ich am linken Rand neben dem Programmcode rote Punkte setzen – das sind die Breakpoints. Im Debug-Modus (Klick auf den Käfer) wird das Programm an dieser Stelle angehalten, und ich kann z.B. die Werte von Variablen ansehen. (Falls nicht: unter Ansicht lässt sich das Fenster Variablen anschalten) Das ist nützlich, um Fehler zu finden.
Mit der Maus kann ich am linken Rand neben dem Programmcode rote Punkte setzen – das sind die Breakpoints. Bei der Ausführung wird das Programm an dieser Stelle angehalten, und ich kann z.B. die Werte von Variablen ansehen. Das ist nützlich, um Fehler zu finden.
if (x <= 5) {
    x = x + 7;
}
if (x > 12) {
    x = x + 3;
}
x = x + 32;
if (x < 0) {
    x = x * (-1);
}
println(x)

Nimm an, x hat vor Ausführung dieser Zeilen den Wert

  • 3
  • 12

Welchen Wert gibt die Zeile print(x) jeweils aus?

if x <= 5:
    x = x + 7
if x > 12:
    x = x + 3
x = x + 32
if x < 0:
    x = x * -1
print(x)

Nimm an, x hat vor Ausführung dieser Zeilen den Wert

  • 3
  • 12

Welchen Wert gibt die Zeile print(x) jeweils aus?

  • 42
  • -44