Aufgeräumter Code

Den Code aufräumen #

from random import randint

def erzeuge_zufallsnummer(listenlänge):
    zufalls_listennummer = randint(1, listenlänge)
    return zufalls_listennummer

def ganzzahl_einlesen(prompt=''):
    eingabe = input(prompt)
    while not eingabe.isdigit():
        print('Die Eingabe konnte nicht in eine Zahl umgewandelt werden.')
        eingabe = input(prompt)
    return int(eingabe)

listenlänge = ganzzahl_einlesen('Wie viele Schüler_innen sind in der Klasse? ')
zufallsnummer = erzeuge_zufallsnummer(listenlänge)
print('Zufällig ausgewählt wurde der Schüler/die Schülerin mit der Nummer', zufallsnummer)
  • Weil die Variable eingabe eine Zeichenkette (und in Python daher ein so genanntes Objekt) ist, lassen sich an ihr mit der Punktschreibweise so genannte Methoden aufrufen, die – genau so wie Funktionen – etwas zurückgeben können.
  • Rückgabewert der Stringmethode isdigit ist ein Wahrheitswert (bool). Wahrheitswerte gibt es nur zwei: True (wahr) und False (falsch)
  • not dreht das Ergebnis des nachfolgenden Ausdrucks um: not True wird zu False ausgewertet, not False zu True
  • while wiederholt den nachfolgenden Codeblock solange die Bedingung, die direkt nach dem while aufgeschrieben wird, True (also wahr) ist. Wie bei den Funktionen wird der Block nach dem Doppelpunkt eingerückt. (Vorsicht! Wenn die Bedingung, die zu Anfang angegeben wird, niemals False ergeben kann, gerät das Programm in eine Endlosschleife und muss von außen abgebrochen werden.)
from random import randint

def erzeuge_zufallsnummer(listenlänge):
    zufalls_listennummer = randint(1, listenlänge)
    return zufalls_listennummer

def ganzzahl_einlesen(prompt=''):
    eingabe = input(prompt)
    while not eingabe.isdigit():
        print('Die Eingabe konnte nicht in eine Zahl umgewandelt werden.')
        eingabe = input(prompt)
    return int(eingabe)

if __name__ == '__main__':
    listenlänge = ganzzahl_einlesen('Wie viele Schüler_innen sind in der Klasse? ')
    zufallsnummer = erzeuge_zufallsnummer(listenlänge)
    print('Zufällig ausgewählt wurde der Schüler/die Schülerin mit der Nummer', zufallsnummer)
  • if überprüft eine Bedingung (wieder wird ein Wahrheitswert überprüft), der CodeBlock wird nur ausgeführt, wenn die Bedingung zutrifft.
  • == vergleicht die linke und die rechte Seite und gibt True zurück, wenn beide Seiten gleich sind, und False, falls nicht.
  • __name__ ist eine modulinterne Referenz auf eine Zeichenkette, die den Namen des Moduls enthält. (Module können mit import in eigene Programme eingebunden werden.) Wird eine Datei nicht eingebunden, sondern direkt ausgeführt, enthält __name__ den Wert '__main__'
from random import randint

def erzeuge_zufallsnummer(listenlänge):
    zufalls_listennummer = randint(1, listenlänge)
    return zufalls_listennummer

def ganzzahl_einlesen(prompt=''):
    eingabe = input(prompt)
    while not eingabe.isdigit():
        print('Die Eingabe konnte nicht in eine Zahl umgewandelt werden.')
        eingabe = input(prompt)
    return int(eingabe)

def main():
    listenlänge = ganzzahl_einlesen('Wie viele Schüler_innen sind in der Klasse? ')
    zufallsnummer = erzeuge_zufallsnummer(listenlänge)
    print('Zufällig ausgewählt wurde der Schüler/die Schülerin mit der Nummer', zufallsnummer)

if __name__ == '__main__':
    main()
  • Noch aufgeräumter sieht das Programm aus, wenn wir eine main benannte Funktion definieren, deren Ausführung mit dem bekannten Konstrukt gestartet wird. Die Aufteilung ist übersichtlicher. Jede Funktion hat außerdem einen eigenen Scope, d.h. die in der Funktion erzeugten Variablen sind nur dort bekannt. (Im Gegensatz dazu außerhalb von Funktionen erzeugte Variablen werden global genannt. Viele globale Variablen zu verwenden gilt als schlechter Programmierstil.