Python/Tkinker: Wieso liefert mein Reaktionstest immer die Reaktionszeit 0, ohne dass ich etwas drücke?
Ich bekomme immer Reaktionzeit: 0 gesagt, ohne etwas zu drücken. Weiß jemand, wieso das so ist?
from tkinter import *
import random
window = Tk()
window.title("Reaktionstest")
window.geometry("800x800")
window.configure(bg="white")
limit = 0
score = random.randint(9, 10)
reaction_time = 0
green = False
def verzögerung():
global score, limit, green
score -= 1
if score = limit:
# schedule next update 1 second later
window.after(1000, reaktion)
else:
green = False # Setze green auf False, wenn score kleiner oder gleich limit ist
show_end_screen()
def reaktion():
global green, reaction_time
if green:
reaction_time += 1
if rB.winfo_exists(): # Überprüfung, ob der Button noch existiert
rB.configure(bg="red")
print("Red")
else:
green = True
if rB.winfo_exists(): # Überprüfung, ob der Button noch existiert
rB.configure(bg="green")
print("Green")
def show_end_screen():
global reaction_time # Zugriff auf die globale Variable reaction_time
rB.destroy()
reaction_time_label = Label(window, text=f"Reaktionszeit: {reaction_time} Sekunden", bg="white", fg="black", font=("Arial", 24))
reaction_time_label.place(x=250, y=150)
ueberschrift = Label(window, text="Reaktionstest", bg="lightcyan", fg="black", font=("Arial", 44, "bold"))
ueberschrift.place(x=234, y=50)
rB = Button(window, bg="red", text="Drücke mich, wenn ich grün werde", font=("Arial", 10), command=reaktion)
rB.place(x=100, y=100, width=400, height=400)
limit = score # Setze limit auf den Wert von score
window.after(1000, verzögerung) # start the update 1 second later
window.mainloop()
1 Antwort
Innerhalb der Funktion verzögerung hast du einen Syntaxfehler im if-Kopf.
if score = limit:
Vermutlich möchtest du beide Variablen miteinander vergleichen (andernfalls würde die vorherige Aktion keinen Sinn machen). Dafür brauchst du den Vergleichsoperator (==).
Da beide Variablen zu diesem Zeitpunkt nicht wertgleich sein können (die Variable score ist ja immer um 1 kleiner als limit), wird der else-Rumpf durchlaufen.
In show_end_screen erfolgt die Ausgabe der Reaktionszeit. Da die sich bis dahin nicht verändert hat, ist sie 0.
Die Variable score ist wie gesagt immer um 1 kleiner als limit. Im unteren Programmteil setzt du limit auf den gleichen Wert, in verzögerung subtrahierst du score um 1.
danke erstmal, macht Sinn. Hättest du eine Idee, wie ich das Problem des Vergleichsoperator lösen kann, bei score >=limit ist der gleiche Output