Auf Taste reagieren

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
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

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
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

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
Benutzeravatar
snafu
User
Beiträge: 6908
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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?
nfehren
User
Beiträge: 98
Registriert: Donnerstag 31. Oktober 2013, 15:11

Ja es soll eine Konsolenanwendung werden :)
Benutzeravatar
Kebap
User
Beiträge: 786
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Servus! :) Mit Enter ist es eigentlich sehr einfach.. aber ob das alles ist? :D

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. :mrgreen:
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

@Kebap: Da gibt es einiges zu verbessern an deinem Code. Wenn du Code vom Muster

Code: Alles auswählen

anweisung x
while cond:
    ...
    anweisung x
hast, dann musst du von einer while-do-Schleife auf eine do-while-Schleife wechseln. Die Drückt man in Python üblicherweise so aus:

Code: Alles auswählen

while True:
    anweisung x
    ...
    if not cond:
        break
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

Code: Alles auswählen

print("Die Zahl ist jetzt:", meine_zahl)
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.
Das Leben ist wie ein Tennisball.
Henry.St
User
Beiträge: 1
Registriert: Freitag 20. Juni 2014, 20:22

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

Code: Alles auswählen

while x==1:
    #...
(Ich probiere selbst noch damit rum, wer Tipps dazu hat soll es schreiben :) )

LG
Henry
Zuletzt geändert von Anonymous am Freitag 20. Juni 2014, 20:43, insgesamt 2-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
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.
Antworten