2016-07-30 15 views
0

Ich habe Probleme mit dem Code unten, der den Benutzer fragt, eine 'Weckzeit' eingeben, die das Python-Skript dann verwenden wird, um zu berechnen, wie lange bis die Uhr erreicht Null. Von dem, was ich unten habe, denke ich, dass ich die tdelta Berechnung innerhalb der While-Schleife platzieren muss, so dass es ständig nach der aktuellen Zeit sucht.Python3: Kontinuierliche Aktualisierung von Datetime-Wert von innerhalb WHEN Schleife

Im Moment scheint tdelta nach der aktuellen Zeit in Sekunden zu suchen und dann denselben Wert zu verwenden, um die while-Schleife zu durchlaufen. Daher nie endend, weil es die gleiche Zeit immer wieder verwendet. Sollte ich innerhalb der While-Schleife eine Funktion verwenden, um kontinuierlich nach dem neuen Wert zu suchen, und dann wahr oder falsch auswerten?

from datetime import datetime 
import time 
now = datetime.now() 
hms = "%s:%s:%s" % (now.hour, now.minute, now.second) 

ans = input('Enter hour:minute:seconds') 

s1 = hms 
s2 = ans # for example 
FMT = '%H:%M:%S' 
tdelta = datetime.strptime(s2, FMT) - datetime.strptime(s1, FMT) 

if tdelta.days < 0: 
    tdelta = timedelta(days=0, 
       seconds=tdelta.seconds, microseconds=tdelta.microseconds) 


while tdelta.seconds != 0: 
    # Use this to see what is happening inside the loop. Here it continuously prints the same time in seconds so is a continuous loop. I need to somehow update the tdelta time. 
    if tdelta.seconds != 0: 
     print(tdelta.seconds) 
     time.sleep(1) 

    else: 
     print('time up...do something') 

Ich habe Dutzende von Varianten des obigen Codes versucht, aber ohne Glück. Ich schätze alle Tipps. Vielen Dank.

+0

Sie müssen in der Schleife aktualisieren, tdelta - = Timedelta (Sekunden = 1) nach dem Importieren von Timedelta auch –

+0

Vielleicht möchten Sie einen Scheduler verwenden? https://docs.python.org/3/library/sched.html –

Antwort

0

Danke an Padraic Cunningham, der den fehlenden Code zur Verfügung gestellt hat, damit das funktioniert.

Schritt eins:timedelta Import von datetime Schritt zwei: hinzufügen tdelta -= timedelta(seconds=1) mit der ersten Leitung unter der while-Schleife.

from datetime import datetime 
from datetime import timedelta 

import time 
now = datetime.now() 
hms = "%s:%s:%s" % (now.hour, now.minute, now.second) 

ans = input('Enter hour:minute:seconds') 

s1 = hms 
s2 = ans # for example 
FMT = '%H:%M:%S' 
tdelta = datetime.strptime(s2, FMT) - datetime.strptime(s1, FMT) 

if tdelta.days < 0: 
    tdelta = timedelta(days=0, 
       seconds=tdelta.seconds, microseconds=tdelta.microseconds) 


while tdelta.seconds != 0: 
    tdelta -= timedelta(seconds=1) 
    """Use this to see what is happening inside the loop. Here it continuously prints the same time in seconds so is a continuous loop. I need to somehow update the tdelta time.""" 
    if tdelta.seconds != 0: 
     print(tdelta.seconds) 
     time.sleep(1) 

    else: 
     print('time up...do something') 

Das Endergebnis ist, dass die Befehlszeile auf Null zählen wird und einmal tdelta gleich 0 ist, ist es aus der else-Anweisung gedruckt wird.