Seite 1 von 1

Funkionen in Variablen speichern und abrufen

Verfasst: Donnerstag 6. Juni 2019, 17:49
von pleasehelp!
Hallo, ich würde gerne wissen, ob es möglich ist Funktionen in Variablen abzuspeichern und über diese sie abzurufen.
Ich bräuchte das in Bezug auf eine Abfrage.

Code: Alles auswählen

def richtigeangabe(conn, s, funktion ):
    while True:
        s = input("Geben Sie die Schülernummer ein: ")
        showSchueler(conn, s)
        print("Sind das die richtigen Schülerangaben?")
        WahlR = input("Ja oder Nein: ")
        WahlR = WahlR.lower()
        if WahlR == "ja":
           # funktion
            break
        elif WahlR == "nein":
            pass
    return s
Danke schonmal für die Hilfe!

Re: Funkionen in Variablen speichern und abrufen

Verfasst: Donnerstag 6. Juni 2019, 18:05
von Sirius3
Ja, hast Du es schon probiert? Die Funktion kennen wir schon, aber was hat das mit Deiner Frage zu tun? Was möchtest Du machen?

Re: Funkionen in Variablen speichern und abrufen

Verfasst: Donnerstag 6. Juni 2019, 18:06
von __blackjack__
@pleasehelp!: Funktionen kann man wie jeden anderen Wert in Python an Namen binden, in Datenstrukturen stecken, als Argument übergeben, …

Code: Alles auswählen

In [18]: convert = int                                                          

In [19]: convert('42')                                                          
Out[19]: 42

Re: Funkionen in Variablen speichern und abrufen

Verfasst: Freitag 7. Juni 2019, 08:50
von sls
@pleasehelp!:

noch ein paar Anmerkungen zum gezeigten Code.

Bezeichner für Variablen, Funktionen und Methoden werden in Python komplett_klein_mit_unterstrich geschrieben. Die Bezeichner selbst sollten möglichst aussagekräftig sein. `conn`, `richtigeangabe`, `s`, `WahlR` etc. laden zu munteren Ratespielen ein, auch eine Mixtur aus aus Deutsch und Englisch ist äußerst grässlich: `showSchueler`.

Der Code lässt sich etwas kompakter gestalten, lower() kann direkt an input() gehängt werden, das print() mit der Abfrage der richtigen Schülerangaben ist überflüssig und lässt sich ebenfalls mit input() verheiraten, bei der Abfrage der Schülernummer machst du das ja schon. Wenn `WahlR` zutrifft, wird die Funktion aufgerufen. Wenn nicht, passiert erstmal gar nichts. Kommt hier noch was? Sonst ist der else-Block nutzlos.

Du übergibst der Funktion `richtigeangabe` den Parameter `s`, welcher aber erst in der Funktion ermittelt wird. Entweder die Schülernummer steht schon fest und wird übergeben, dann wird sie knallhart überschrieben, oder aber du lässt `s` als Übergabeargument weg wenn das nur in der Funktion geschehen soll.

Außerdem solltest du generell noch fehlerhafte Benutzereingaben abfangen, das passiert im genannten Code gar nicht und es gibt viele Möglichkeiten das Programm so zum Absturz zu bringen.

Idee:

Code: Alles auswählen

def pruefe_schueler_daten(conn, funktion):
    while True:
        schueler_id = input("Geben Sie die Schülernummer ein: ")
        zeige_schueler_daten(conn, schueler_id)
        schueler_daten_korret = input(
            "Sind das die richtigen Schülerangaben? Geben Sie Ja oder Nein ein: "
        ).lower()
        if schueler_daten_korret == "ja":
            # funktion
            break
    return schueler_id