Seite 1 von 1
Eine Funktion mit input aufrufen, wie geht das ?
Verfasst: Sonntag 3. November 2019, 15:02
von Revan
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
Re: Eine Funktion mit input aufrufen, wie geht das ?
Verfasst: Sonntag 3. November 2019, 15:37
von CuzImFake_
Wie genau meinst Du das?
Soll eine Funktion durch einen bestimmten Userinput ausgeführt werden, oder soll der Userinput als Parameter verwendet werden?
Re: Eine Funktion mit input aufrufen, wie geht das ?
Verfasst: Sonntag 3. November 2019, 15:57
von Revan
Die Funktion soll durch den Userinput ausgeführt werden
Re: Eine Funktion mit input aufrufen, wie geht das ?
Verfasst: Sonntag 3. November 2019, 16:27
von CuzImFake_
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
Re: Eine Funktion mit input aufrufen, wie geht das ?
Verfasst: Sonntag 3. November 2019, 17:04
von Revan
Danke sehr.

Re: Eine Funktion mit input aufrufen, wie geht das ?
Verfasst: Sonntag 3. November 2019, 17:06
von CuzImFake_
Gerne doch

Re: Eine Funktion mit input aufrufen, wie geht das ?
Verfasst: Sonntag 3. November 2019, 17:06
von nezzcarth
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.
Re: Eine Funktion mit input aufrufen, wie geht das ?
Verfasst: Sonntag 3. November 2019, 17:44
von Sirius3
@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.
Re: Eine Funktion mit input aufrufen, wie geht das ?
Verfasst: Sonntag 3. November 2019, 17:49
von __blackjack__
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()
Re: Eine Funktion mit input aufrufen, wie geht das ?
Verfasst: Sonntag 3. November 2019, 17:49
von CuzImFake_
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.

Re: Eine Funktion mit input aufrufen, wie geht das ?
Verfasst: Sonntag 3. November 2019, 18:01
von nezzcarth
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()