# pynput muss zur verfügung stehen
# peil nach oben beginnt
# peil nach unten nächste
# ESC Taste beendet Prg
#
# ich kann den counter nicht von einer anderen Function nicht auf null stellen.
from pynput import keyboard
last_key_press = ""
counter = 0
def erster():
global counter
counter = counter + 1
print("counter erster "+str(counter))
def on_press(key):
print('Key {} pressed.'.format(key))
global last_key_press
key_press = key
if last_key_press != key_press:
print("zurück setzen " )
C_links = 0
print("C_links "+str(C_links))
if key == keyboard.Key.up :
print("Up")
last_key_press = key
erster()
erster()
if key == keyboard.Key.down :
print("Down")
last_key_press = key
erster()
erster()
if key == keyboard.Key.esc :
print("Abruch / Ende")
last_key_press = key
return False
def on_release(key):
print('{0} released'.format(key))
print(keyboard.Key)
if key == keyboard.Key.esc:
return False
try:
with keyboard.Listener(
on_press = on_press,
on_release = on_release) as listener:
listener.join()
except KeyboardInterrupt:
print("\n Ende")
except:
print ("\n Oher error or exception occured")
wie ist es möglich die Variable counter in der def erster von der def on_keypress auf nul lzu setzen.
Meine Versuche sind alle Erfolg los. Bin aber auch für anderen Vorschlag dankbar.
bitte auch den Anfang des Prg lesen. Danke
globale / locale Variable
Hallo wolsue,
dein Code ist ohne Einrückung nicht zu lesen.
Bitte benutze im vollständigen Editor den Button </> und füge deinen Code dann zwischen
[ code] und [ /code] ein.
"global" ist nicht gerne gesehen in Python, das kann man auch ohne lösen.
Dafür kann man Funktionen Argumente übergeben und Funktionen können Rückgabewerte
an den aufrufenden Code zurück liefern.
dein Code ist ohne Einrückung nicht zu lesen.
Bitte benutze im vollständigen Editor den Button </> und füge deinen Code dann zwischen
[ code] und [ /code] ein.
"global" ist nicht gerne gesehen in Python, das kann man auch ohne lösen.
Dafür kann man Funktionen Argumente übergeben und Funktionen können Rückgabewerte
an den aufrufenden Code zurück liefern.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
@wolsue: Programmieren braucht eine gewisse Sorgfalt. Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht mal 2, 3, 4 oder 5 oder gar 7. For : kommen keine Leerzeichen.
Das nakte Except am Schluß verhindert, dass Du irgendeinen Programmierfehler finden kannst, weil alles durch ein "Oher error occured" platt gemacht wird.
Du kannst counter um 1 erhöhen. Wie hast Du versucht counter auf 0 zu setzen?
Was willst Du eigentlich machen?
Das nakte Except am Schluß verhindert, dass Du irgendeinen Programmierfehler finden kannst, weil alles durch ein "Oher error occured" platt gemacht wird.
Du kannst counter um 1 erhöhen. Wie hast Du versucht counter auf 0 zu setzen?
Was willst Du eigentlich machen?
Die Sorgfalt ist mir bekannt. Nur mit copy/paste wird diese Sorgfalt ignoriert. Leider kann ich dies im nach herein nicht berichtigen.
@Sirius3 was ich machen will:
Ein Zähler eines Sensor wird um 1 erhöht wenn True erfüllt ist. Dieser Zähler muss aber bei bestimmten Tasten zurück gesetzt werden.
versuch hab ich:
am Anfang counter als global definiert also ausserhalb aller Functionen
erzeugt fehler --> local variable ' counter' referenced before assigmment
@Sirius3 was ich machen will:
Ein Zähler eines Sensor wird um 1 erhöht wenn True erfüllt ist. Dieser Zähler muss aber bei bestimmten Tasten zurück gesetzt werden.
versuch hab ich:
am Anfang counter als global definiert also ausserhalb aller Functionen
erzeugt fehler --> local variable ' counter' referenced before assigmment
Da ich deine echten Code immer noch nicht sehen kann, kann ich nur raten: du hast versucht, global vor die Variablen auf Modul Ebene zu schreiben. Das geht, bringt aber nichts. Richtig(*) geht es so:
*mit globalen Variablen zu arbeiten ist ein Entwurfsfehler, der sich üblicherweise später rächt. Aber da das kaum wen aus dem PI-Lager interessiert, hast du jetzt all das Seil, um dich selbst zu erhängen.
Code: Alles auswählen
>>> global foo # akzeptiert der Interpreter, ist aber Unsinn. Global weglassen!,!
>>> foo = 10
>>> def a():
... foo += 1
...
>>> def b():
... global foo
... foo += 1
...
>>> a()
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "<string>", line 2, in a
UnboundLocalError: local variable 'foo' referenced before assignment
>>> b()
>>> foo
11
- DeaD_EyE
- User
- Beiträge: 1236
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Das gleiche als Klasse ohne die Nutzung von globale Namen (Variablen).
Aber ja, wird eh ignoriert. Funktionen werden auch nicht so oft eingesetzt.
Code: Alles auswählen
class Foo:
def __init__(self):
self._a = 0
self._b = 0
def a(self):
self._a += 1
return self._a
def b(self):
self._b += 1
return self._b
foo = Foo()
foo.a()
foo.b()
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server