Die Stoppuhr in Python

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
03Leon01
User
Beiträge: 2
Registriert: Mittwoch 15. Januar 2020, 08:40

Guten Morgen,
  • ich habe ein kleines Problem mit meiner Python-Stoppuhr. Ich weiß auch nicht genau zu welchem Themenbereich ich die Frage hochladen soll aber ich hoffe, in Allgemeine Fragen bekomme ich etwas Hilfe.

    Mein Programm ( weiter unten mit eingefügt ) soll eine Stoppuhr sein. Das Programm läuft soweit im Visual Studio Code ( Python Version 3.8 ), doch sobald ich das Programm in das Terminal des Raspberrys abspielen lassen möchte, kommt: " NameError: name 'start_time' is not defined ".
    In Python bin ich noch neu dabei, deshalb bin ich gerade etwas Planlos.
  • Eine weitere Bitte von mir wäre( kein muss ), wie ich die gestoppte Zeit von Sekunden auf Minuten und Stunden umrechnen kann, sofern sie mehr als 60 Sekunden beträgt, da ich nicht nur eine lange Zahlenfolge in Sekunden ablesen möchte. Damit meine ich, dass die Zeit dann so als H:M:S ausgegeben wird. Könnte ich nicht auch dabei einfach mit einer If-Abfrage arbeiten?
Ich wäre euch dankbar für Hilfestellungen und Lösungsvorschläge.

Mit freundlichen Gruß,
Leon

Das Stoppuhr-Programm...

Code: Alles auswählen

import time
import datetime
from datetime import timedelta

while True:
    try:
        input("Enter drücken zum starten, strg-c zum stoppen")
        start_time = time.time()
        print("Zeit zählt jetzt")
        while True:
            print("Zeit: ",round(time.time()-start_time,0),"sek" ,end="\n")
            time.sleep(1)
    except KeyboardInterrupt:
    
            print("Zeit wurde gestoppt!")
            end_time=time.time()
            timeframe = datetime.timedelta(round(end_time-start_time,2))
            
            print("Die Zeit stoppte bei",round(end_time-start_time,2),"sekunden") 
    break
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Ich würde dir empfehlen mehr mit DateTime zu berechnen, da du bei DateTimeObjekten mehr Möglichkeiten hast als mit dem float den du bei time.time() raus bekommst.

Code: Alles auswählen

import datetime


input("\nZum Starten bitte beliebgige Taste drücken. Zum Beenden bitte STRG + C drücken\n")
start = datetime.datetime.now()
while True:
    try:
        print(f"{str(datetime.datetime.now() - start)[:-4]}") #-4 nur damit die Millisekunden 2 statt 6 Stellen haben
    except KeyboardInterrupt:
        break
ende = datetime.datetime.now()

print(f"\nEs dauerte {ende-start}")
Wenn das dir zu schnell geht kannst du ja dann noch ein time.sleep(1) einbauen, dass er nur jede Sekunde die vergangene Zeit ausgibt.


Bei deinem Code oben importierst du zwar schon die DateTime Lib, benutzt diese aber nur in einer Zeile welche keinen Einfluss auf den Code hat.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Formatierungseinstellungen von timedeltas ist sehr eingeschränkt, so dass man da mit Stringmanipulation herummurksen muß. Einen str-Aufruf in einem Formatstring wäre mit schon zu viel Logik, zumal Du nichts anderes machst, als einen String damit auszugeben. Ohne sleep wird zu viel ausgegeben, so dass die Ausgabe nicht mehr mit der Zeit hinterherkommt und damit die Sekunden unregelmäßig ablaufen.

@03Leon01: zum Umrechnen ist divmod sehr praktisch. Für Zeitabläufe ist time.monotonic besser.

Code: Alles auswählen

import time
input("\nZum Starten bitte beliebgige Taste drücken. Zum Beenden bitte STRG + C drücken\n")
start_time = time.monotonic()
try:
    while True:
        delta_time = time.monotonic() - start_time
        minutes, seconds = divmod(delta_time, 60)
        hours, minutes = divmod(minutes, 60)
        print(f"{hours:.0f}:{minutes:02.0f}:{seconds:05.2f}", end="\r")
        time.sleep(0.03)
except KeyboardInterrupt:
    pass
print(f"\nEs dauerte {delta_time}")
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Die Zeit die während des Laufens der Stoppuhr angezeigt wird ist dann evtl. nicht exakt die Richtige, aber die Zeit die als Ergebnis rauskommt ist doch definitiv die Richtige, oder? Da spielt ja die Logik im Formatstring keine Rolle mehr.
03Leon01
User
Beiträge: 2
Registriert: Mittwoch 15. Januar 2020, 08:40

Moin,
Ich bedanke mich bei euch, die Hilfestellung mit dem divmod und time.monotonic habe ich mir weiter zu nutze gemacht und es funktioniert jtz alles wie ich mir das vorgestellt habe.
Dankeschön.
Antworten