Funkionen in Variablen speichern und abrufen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
pleasehelp!
User
Beiträge: 28
Registriert: Donnerstag 15. November 2018, 20:44

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!
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

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?
Benutzeravatar
__blackjack__
User
Beiträge: 14044
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

@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
When we say computer, we mean the electronic computer.
Antworten