Eine Funktion mit input aufrufen, wie geht das ?
-
- 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?
Soll eine Funktion durch einen bestimmten Userinput ausgeführt werden, oder soll der Userinput als Parameter verwendet werden?
-
- 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
Wenn der User jetzt "f" (oder "F") eingeben würde, würde die Funktion foo() ausgeführt werden
Code: Alles auswählen
def foo():
print("bar")
return
x = input("Please enter a character: ")
if (x == "f" or x == "F"):
foo()
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.
@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.
Das `return` in der Funktion ist überflüssig. `x` ist ein schlechter Variablenname, allgemein, und im speziellen für ein Zeichen.
- __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
-
- User
- Beiträge: 4
- Registriert: Sonntag 3. November 2019, 14:01
Jap, das weiß ich. Da es sich aber auch nur um ein schnelles Beispiel handeln sollte, habe ich es so gemacht.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.
Die Klammern bei if mache ich eigentlich immer so, weil ich es von C++ so gewöhnt bin.

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()