Benutzereingaben verarbeiten

Bisher haben wir Beispiel-Eingaben immer direkt im Quelltext codiert oder als Parameter von Funktionen oder Prozeduren in der Python-Shell eingegeben. Im Folgenden diskutieren wir, wie wir Benutzereingaben im Terminal verarbeiten können.

Python stellt eine vordefinierte Funktion input() zur Verfügung, mit deren Hilfe eine Zeile im Terminal eingelesen werden kann. Bei einem Aufruf von input() wird die Abarbeitung des Programms so lange angehalten, bis eine Zeile (abgeschlossen mit der Enter-Taste) im Terminal eingegeben wurde. Das Ergebnis von input() ist die eingegebene Zeichenkette.

input() akzeptiert eine Eingabeaufforderung als Parameter.

Die folgenden Aufrufe in der Python-Shell zeigen von input() gelieferte Ergebnisse.

>>> input()
Hallo       # Eingabe des Benutzers
'Hallo'      # Rückgabe des input-Aufrufs
>>> input('Wer schrieb das erste Computerprogramm? - ')
Wer schrieb das erste Computerprogramm? - Ada Lovelace
'Ada Lovelace'

Nach dem Aufruf von input() wartet die Python-Shell auf eine Benutzereingabe. Nachdem wir etwas eingegeben und die Enter-Taste gedrückt haben, wird das Ergebnis als Zeichenkette zurückgegeben.

Interaktiv das Maximum zweier Zahlen berechnen

Wir können input() wie folgt verwenden, um die Eingaben für die von uns definierte Funktion max im Terminal einzulesen.

a = int(input('Gib eine ganze Zahl ein: '))
b = int(input('Gib noch eine ganze Zahl ein: '))
print('Die größere von beiden ist ' + str(max(a, b)) + '.')

Wenn wir dieses Programm ausführen, werden wir zunächst nach zwei Zahlen gefragt und dann wird die größere von beiden ausgegeben:

Gib eine ganze Zahl ein: 5
Gib noch eine ganze Zahl ein: 42
Die größere von beiden ist 42.

input() gibt immer eine Zeichenkette als Ergebnis zurück. Deswegen müssen wir die Eingaben mit int() in ganze Zahlen umwandeln. Die eingelesenen Zahlen reichen wir als Argumente an die Funktion max() weiter, deren Ergebnis wir mit str() wieder in eine Zeichenkette umwandeln, um es ausgeben zu können.

Interaktiver Primzahltest

Wir können Benutzereingaben auch in einer Schleife einlesen, um interaktive Programme zu schreiben, die mit ihren Benutzern kommunizieren. Das folgende Programm fragt zum Beispiel so lange nach Eingaben, wie positive Zahlen eingegeben werden (dies wird mit isnumeric() geprüft), und gibt dann aus, ob es sich bei der eingegebenen Zahl um eine Primzahl handelt.

s = input('Gib eine Zahl ein: ')

while s.isnumeric() and int(s) > 0:
  n = int(s)
  if is_prime(n):
    print(str(n) + ' ist eine Primzahl.')
  else:
    print(str(n) + ' ist keine Primzahl.')
  s = input('Gib noch eine Zahl ein: ')

Hier ist eine Beispiel-Interaktion mit diesem Programm:

Gib eine Zahl ein: 17
17 ist eine Primzahl.
Gib noch eine Zahl ein: 21
21 ist keine Primzahl.
Gib noch eine Zahl ein: quit

Nach Eingabe von quit wird die Schleife beendet, und es werden keine weiteren Fragen mehr gestellt.

Zahlenraten mit Benutzereingabe

Wir können nun auch unser Programm zum Zahlenraten so abwandeln, dass es eine vom Benutzer gedachte Zahl errät.

min = 1
max = 100

erraten = False

while not erraten:
  if min == max:
    print("Die Zahl ist " + str(min) + ".")
    erraten = True
  else:
    kandidat = (min + max) // 2
    antwort = input("Ist die Zahl " + str(kandidat) + "? ")
    if antwort == "=":
      erraten = True
    if antwort == "<":
      max = kandidat - 1
    if antwort == ">":
      min = kandidat + 1

Hier ist eine Beispiel-Interaktion mit diesem Programm:

    Ist die Zahl 50? <
    Ist die Zahl 25? >
    Ist die Zahl 37? >
    Ist die Zahl 43? <
    Ist die Zahl 40? >
    Ist die Zahl 41? >
    Die Zahl ist 42.