Eine Funktion mit input aufrufen, wie geht das ?

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
Revan
User
Beiträge: 3
Registriert: Sonntag 3. November 2019, 14:59

Ich habe gerade mit Python angefangen und mithilfe eines Userinputs eine Funktion(def) aufrufen. Kann mir jemand erklären ob das geht und wenn ja wie? Danke
CuzImFake_
User
Beiträge: 4
Registriert: Sonntag 3. November 2019, 14:01

Wie genau meinst Du das?
Soll eine Funktion durch einen bestimmten Userinput ausgeführt werden, oder soll der Userinput als Parameter verwendet werden?
Revan
User
Beiträge: 3
Registriert: Sonntag 3. November 2019, 14:59

Die Funktion soll durch den Userinput ausgeführt werden
CuzImFake_
User
Beiträge: 4
Registriert: Sonntag 3. November 2019, 14:01

Du könntest überprüfen, was der User eingegeben hat und dann dementsprechend die Funktion ausführen

Code: Alles auswählen

def foo():
	print("bar")
	return
	
x = input("Please enter a character: ")

if (x == "f" or x == "F"):
	foo()
Wenn der User jetzt "f" (oder "F") eingeben würde, würde die Funktion foo() ausgeführt werden
Revan
User
Beiträge: 3
Registriert: Sonntag 3. November 2019, 14:59

Danke sehr.😁
CuzImFake_
User
Beiträge: 4
Registriert: Sonntag 3. November 2019, 14:01

Gerne doch :D
nezzcarth
User
Beiträge: 1764
Registriert: Samstag 16. April 2011, 12:47

Wie man das sinnvoll umsetzt, ist meiner Meinung nach abhängig vom Aufbau deines Skripts. Es gibt verschiedene Wege, wie man das realisieren kann, im Endeffekt läuft es aber darauf hinaus, dass man bestimmte "Trigger-Strings" definiert, die man auf Funktionsobjekte oder -aufrufe abbildet. Ich mache das meist mit einem Dictionary; das ist flexibler, als explizite Bedingungsabfragen. Die Eingabe wird normalisiert und anschließend versucht, aus einem Dictionary einen dazu passenden Eintrag abzurufen. Das zurück gegebene Funktionsobjekt wird anschließend (mit den Parametern) aufgerufen.
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@CuzImFake_: zu Deinem Code: eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs. Die Klammern um die if-Bedingung sind überflüssig und können weg.
Das `return` in der Funktion ist überflüssig. `x` ist ein schlechter Variablenname, allgemein, und im speziellen für ein Zeichen.
Benutzeravatar
__blackjack__
User
Beiträge: 14050
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ergänzend: Funktionsnamen beschreiben in der Regel die Tätigkeit die sie durchführen und für einen Test der nicht auf Gross-/KLeinschreibung achtet, wandelt man den Wert der verglichen wird in der Regel in Kleinbuchstaben um, statt beide Varianten in den Code schreiben zu müssen. Das ist eine Fehlerquelle und macht mehr Arbeit als nötig wenn man mal etwas an dem Text ändern will oder muss.

Code: Alles auswählen

#!/usr/bin/env python3


def do_something():
    print("bar")


def main():
    character = input("Please enter a character: ")
    if character.lower() == "f":
        do_something()


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
CuzImFake_
User
Beiträge: 4
Registriert: Sonntag 3. November 2019, 14:01

Sirius3 hat geschrieben: Sonntag 3. November 2019, 17:44 @CuzImFake_: zu Deinem Code: eingerückt wird immer mit 4 Leerzeichen pro Ebene, keine Tabs. Die Klammern um die if-Bedingung sind überflüssig und können weg.
Das `return` in der Funktion ist überflüssig. `x` ist ein schlechter Variablenname, allgemein, und im speziellen für ein Zeichen.
Jap, das weiß ich. Da es sich aber auch nur um ein schnelles Beispiel handeln sollte, habe ich es so gemacht.
Die Klammern bei if mache ich eigentlich immer so, weil ich es von C++ so gewöhnt bin. :)
nezzcarth
User
Beiträge: 1764
Registriert: Samstag 16. April 2011, 12:47

Hier mal ein Alternativvorschlag:

Code: Alles auswählen

#!/usr/bin/env python3
from operator import add, sub, mul, truediv

DISPATCH = {
        'add': add,
        'subtract': sub,
        'multiply': mul,
        'divide': truediv
        }


def normalize(s):
    return s.strip().lower()


def main():
    x = 5
    y = 7
    while True:
        query = input('Operation? ')
        operation = DISPATCH.get(normalize(query))
        if operation is not None:
            break
        print('Unknown operation:', query)
        print('Allowed:', ', '.join(DISPATCH))
    print('Result:', operation(x, y))


if __name__ == '__main__':
    main()
Antworten