Ich programmiere gerade ein Quiz mit tkinter. Jetzt möchte ich, dass der Spieler erst überlegt und dann eine Taste drücken, um die Antworten zu sehen. Das habe ich schon geschafft(also das mit der Taste), aber damit der Spieler nicht einfach nur drückt und dann mit den Antworten überlegt, möchte ich ihm nur kurz erlauben die Antworten zu lesen, um direkt zu antworten. Sollte er nicht rechtzeitig antworten soll er minus Punkte bekommen.
Mein Problem: Wie kann ich einen Timmer im Hintergrund laufen lassen und dann überprüfen ob der Spieler vor ablaufen oder erst zu spät geantwortet hat.
Im Modul tkinter kann ich den Timmer nicht mit dem Befehl time.sleep() machen, weil dann auch die Buttons von tkinter nicht reagieren, die die Antworten haben.
Zeitbegrenzung für Benutzer.
Du könntest time.monotonic() benutzen.
Code: Alles auswählen
import time
print("Wie viele Ecken hat ein Viereck?")
print("a) 1 b) 2 c) 50 d) 4")
start_time = time.monotonic()
antwort = input("> ")
end_time = time.monotonic()
if antwort == "d" and end_time - start_time < 10:
print("Richtig")
elif antwort == "d" and end_time - start_time > 10:
print("Richtig, aber zu langsam")
else:
print("Falsch")
@__deets__: für mich hat sich das so angehört als würde er genau das haben wollen, also erst im Nachhinein prüfen ob das Zeitlimit überschritten wurde.
Vielleicht hab ich die Frage einfach nicht richtig verstanden.programmiTx hat geschrieben: Freitag 24. Januar 2020, 15:40 Mein Problem: Wie kann ich einen Timmer im Hintergrund laufen lassen und dann überprüfen ob der Spieler vor ablaufen oder erst zu spät geantwortet hat.
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Jankie: Man kann die Frage so verstehen, aber das macht doch nicht wirklich Sinn, denn nach Ablauf der Zeit braucht man doch nicht mehr auf eine Antwort warten die sowieso nicht mehr ausgewertet werden muss.
Dein Code hat noch das Problem das eine Antwort die richtig war und nach genau 10 Sekunden beantwortet wurde mit der Ausgabe von "Falsch" quittiert wird. Der Test auf Richtigkeit sollte nicht mit dem Test auf Zeitüberschreitung vermischt werden, sondern im Fall das die Antwort richtig war, kann man entscheiden ob die richtige Antwort innerhalb der gegebenen Zeit war oder nicht.
Edit: Zudem war im Beitrag auch die Rede von `tkinter` womit diese Art des wartens sowieso hinfällig ist, weil das die GUI blockiert.
Dein Code hat noch das Problem das eine Antwort die richtig war und nach genau 10 Sekunden beantwortet wurde mit der Ausgabe von "Falsch" quittiert wird. Der Test auf Richtigkeit sollte nicht mit dem Test auf Zeitüberschreitung vermischt werden, sondern im Fall das die Antwort richtig war, kann man entscheiden ob die richtige Antwort innerhalb der gegebenen Zeit war oder nicht.
Edit: Zudem war im Beitrag auch die Rede von `tkinter` womit diese Art des wartens sowieso hinfällig ist, weil das die GUI blockiert.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
@__blackjack__: Für mich hat das ganze keinen Sinn ergeben. Wieso macht es Sinn den User die Antwortmöglichkeiten nur eine bestimmte Zeit anzuzeigen? Was wenn der Leser ein langsamer Leser ist und nicht alle Antwortmöglichkeiten in der Zeit lesen kann? Oder wenn es nur kurze Antwortmöglichkeiten sind reicht ja meistens ein kurzer Blick um sich all diese einzuprägen. Hab halt gedacht er meint sowas wie bei "Wer Wird Millionär?" beim Telefonjoker wo man ja auch nur eine bestimmte Zeit hat die Frage und die Antwortmöglichkeiten zu lesen und zu beantworten.
-
- User
- Beiträge: 6
- Registriert: Mittwoch 18. September 2019, 15:19
Danke für diese Methode ich habe sie zwar noch ein wenig abgeändert, aber so funktioniert es.
- noisefloor
- User
- Beiträge: 4193
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
@Jankie:
@ programmiTx:
Zeig' mal bitte den relevanten Code von dir. Wie weiter oben schon stand, besteht da durchaus die reele Chance, dass deine Lösung zwar funktioniert, aber suboptimal ist bzw. du damit später mal in Probleme rennst.
Gruß, noisefloor
@Jankie:
Der TE hat aber nicht nach _deiner_ Meinung zu seiner Aufgabenstellung gefragt, sondern nach einer Lösung zu seinem Problem... Es gibt hier öfters Aufgabenstellung (z.B. bei Uni-Aufgaben), die semi-sinnvoll sind. Trotzdem muss man die Lösen und geht nicht zu seinem Dozenten und sagt "die Aufgabe ist Müll, die beantworte ich nicht".Für mich hat das ganze keinen Sinn ergeben. Wieso macht es Sinn den User die Antwortmöglichkeiten nur eine bestimmte Zeit anzuzeigen?
@ programmiTx:
Zeig' mal bitte den relevanten Code von dir. Wie weiter oben schon stand, besteht da durchaus die reele Chance, dass deine Lösung zwar funktioniert, aber suboptimal ist bzw. du damit später mal in Probleme rennst.
Gruß, noisefloor
Uns wurde im ersten Semester noch beigebracht, kritische Fragen zu stellen. So unterschiedlich sind die Studiengänge und somit auch die Qualität der Fragen.
@programmiTx: oben schriebst Du noch, dass Du tkinter benutzen willst, da kannst Du aber mit time.monotonic nicht viel erreichen.
@programmiTx: oben schriebst Du noch, dass Du tkinter benutzen willst, da kannst Du aber mit time.monotonic nicht viel erreichen.
@noisefloor: Da die Aufgabenstellung sehr ungenau für mich war hab ich mich halt gewundert. Und ein Forum ist ja da um sich gegenseitig auszutauschen und zu diskutieren, also auch um _meine_ Meinung dazu zu sagen. Der TE muss ja nicht jeden Post hier im Thread berücksichtigen wenn er für Ihn nicht relevant ist. Und wie du sagst, ohne relevanten Code können wir nur Ahnen was er vor hat und ich dachte halt dass Ihm diese Methode helfen könnte. Ob es aber tatsächlich das ist was er wollte oder die beste Möglichkeit ist weiß ich nicht, ich bin ja selber noch Anfänger. Aber trotzdem möchte ich meine Ideen dazu abgeben um auch selbst Rückmeldung zu meinen Vorschlägen zu bekommen um so selber noch etwas dabei zu lernen.
- __blackjack__
- User
- Beiträge: 14052
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
OMG ich bin gerade zwei Jahrzehnte in die Vergangenheit gereist. 

“Vir, intelligence has nothing to do with politics!” — Londo Mollari