Seite 1 von 1
Auf Taste reagieren
Verfasst: Donnerstag 12. Juni 2014, 11:26
von nfehren
Servus

Wie kann ich eine Variable (z.B. x = 1) Bei jedem mal wo ich die Enter taste drücke um 1 größer werden lassen?
Was ist nicht weiß ist wie die Syntax lautet um Python 3 auf eine Taste reagieren zu lassen.
Vielen Dank
Re: Auf Taste reagieren
Verfasst: Donnerstag 12. Juni 2014, 11:46
von bfm
Hallo,
außer einer Schleife mit einem "input" wüßte ich jetzt auf der Konsole nichts, womit man Tasten-Events abfangen könnte. Und da funktioniert das auch nur mit der Enter-Taste.
Eine GUI (zB Tkinter, QT usw) bieten auf jeden Fall die Möglichkeit, dass man Tasten-Events an ein Widget bindet und beim Auftreten der Events entsprechender Code ausgeführt wird.
lg
Re: Auf Taste reagieren
Verfasst: Donnerstag 12. Juni 2014, 11:56
von snafu
Unter Linux kann man ``curses`` verwenden und für Windows gibt es die ``getch()``-Funktion. Grundsätzlich ginge auch ``input()`` (in Python 3.x) oder gar ein Lauschen auf dem Eingabe-Stream. Es kommt sehr auf den Kontext an, was sich hier am Besten eignet. Sprechen wir überhaupt von Eingaben in einem Terminal?
Re: Auf Taste reagieren
Verfasst: Donnerstag 12. Juni 2014, 12:13
von nfehren
Ja es soll eine Konsolenanwendung werden

Re: Auf Taste reagieren
Verfasst: Donnerstag 12. Juni 2014, 20:35
von Kebap
Servus!

Mit Enter ist es eigentlich sehr einfach.. aber ob das alles ist?
Code: Alles auswählen
mein_text = "Bitte Enter drücken oder eine andere Eingabe zum Abbrechen."
meine_zahl = 0
user_eingabe = input(mein_text)
while len(user_eingabe) == 0:
meine_zahl += 1
print("Die Zahl ist jetzt: " + str(meine_zahl))
user_eingabe = input(mein_text)
print("So oft wurde Enter gedrückt: " + str(meine_zahl))
Leider beschreibst du gar nicht, wo und wie und warum du das genau vorhast. Mit ein wenig mehr Hintergrund könnten wir vielleicht besser beraten. Ich würde zB lieber die Nummerntasten benutzen, um Zahlen einzugeben.

Re: Auf Taste reagieren
Verfasst: Freitag 13. Juni 2014, 00:08
von EyDu
@Kebap: Da gibt es einiges zu verbessern an deinem Code. Wenn du Code vom Muster
hast, dann musst du von einer while-do-Schleife auf eine do-while-Schleife wechseln. Die Drückt man in Python üblicherweise so aus:
Damit musst du dann auch keinen Code mehr doppelt schreiben. Da du in diesem Fall noch die Anzahl der Schleifendurchläufe Zählen möchtest, bietet sich das itertools-Modul an, welches eine schöne count-Funktion bereitstellt. Dann wird aus der while-Schleife eine for-Schleife.
Die Bedingung deiner while-Schleife solltest du auch kürzer ausdrücken. ``len(x) == 0`` lässt sich schöner als ``not x`` ausdrücken.
Die ganzen Umwandlungen mittels "str" sind extrem unschön. In diesem Fall kannst du auch einfach
schreiben. Da kommt das selbe Ergebnis raus. Ansonsten gilt: Ein expliziter Aufruf von "str" bei der String-Formatierung ist immer überflüssig. Such in der Python-Dokumentation mal nach "String Formatting", Strings bieten da sehr schöne Methoden. Diese solltest du auch unbedingt einsetzen. Die sind schöner, kürzer und dazu noch besser lesbar.
Dann natürlich noch der obligatorische Hinweise auf PEP 8. Konstanten werden DURCHGÄNGIG_GROSS_GESCHRIEBEN und die Einrückung sollte vier und nicht zwei Leerzeichen betragen.
Re: Auf Taste reagieren
Verfasst: Freitag 20. Juni 2014, 20:37
von Henry.St
Hallo,
ich würde mal onkey ausprobieren.
Key ist von Screen aus Turtle.
Bsp.:
Code: Alles auswählen
from turtle import Screen
screen.onkey([Variablenlose def], "[taste"])
in der def sagst du, dass x=2
am anfang ist x=1
(Ich probiere selbst noch damit rum, wer Tipps dazu hat soll es schreiben

)
LG
Henry
Re: Auf Taste reagieren
Verfasst: Freitag 20. Juni 2014, 20:49
von BlackJack
@Henry.St: Das erscheint mir umständlich `turtle` dazu zu verwenden wenn man eigentlich gar keine Turtle-Grafik haben will. Da kann man auch gleich ein normales GUI-Programm schreiben, was bereits in der ersten Antwort im Thema als mögliche Lösung genannt wurde.
Eine „Variablenlose def” reicht nicht, da sollte man schon eine Methode übergeben, denn irgendwie muss man ja an den Zähler kommen der erhöht werden soll. Also ohne hässliche Hacks wie globale Variablen.