Seite 1 von 1

Timer, Problem mit Schleifen - oder: Mir fällt die Birne auf

Verfasst: Donnerstag 29. November 2007, 21:18
von DocFisher
Hallo,
nachdem ich eine Weile in den tiefen des Netzes nach einer Lösung gesucht habe, wende ich mich an Euch.
Ich bin absoluter Python-Neuling und mache meine ersten Schritte. Und schon stolpere ich....

Mein Ziel:
Einen Timer, der die verbleibende Zeit (Tage:Stunden:Min:Sec) bis zu einem vorher festlegbaren Zeitpunkt anzeigt.

Mein Ansatz:

Code: Alles auswählen

from time import *
ende = 2007, 11, 29, 20, 0, 0, 0, 0, 0
ablauf = mktime(ende)
jetzt = mktime(localtime())
diff = ablauf - jetzt
print strftime("%j:%H:%M:%S", localtime(diff))

if diff < 0:
    jetzt = mktime(localtime())
    diff = ablauf - jetzt
    print strftime("%H:%M:%S", localtime(diff))
    sleep(01) 
Die Schleife wird allerdings nicht ausgeführt und ich muss das skript manuell beenden.
Wo hängt es?
Vermutlich ist es sowieso keine gute Idee, ständig diese Schleife laufen zu lassen. Vielleicht gibt es ja einen Timer, den man mit der Differenz speisen kann...
Aber ich hab ja noch nicht einmal Kinderschuhe an.
Vielen Dank für jegliche Hilfe,

Gruß

Verfasst: Donnerstag 29. November 2007, 21:29
von Y0Gi
Schleife? Welche Schleife? Da sehe ich weder ein `while` noch ein `for`.

Verfasst: Donnerstag 29. November 2007, 21:34
von DocFisher
ääähm, richtig.
jetzt habe ich meinen letzten Versuch gepostet.

Als erstes wollte ich es mit einer while-Schleife (while diff < 0:) mit sleep(01) machen. Lief nicht. Ebenso mit einer for schleife.

Ich habe heute schon ne Weile vor der Kiste gesessen, scheint meinen kognitiven Fähigkeiten nicht gerade zum besten gereicht zu haben, sonst hätte ich keinen so sinnlosen Thread aufgemacht...

Leider muss ich jetzt los, ich war auf keine so schnelle Reaktion gefasst.
Ich poste morgen nochmal ausführlicher. Sorry.

Gruß


EDIT: Ich habe nochmal schnell geschaut. Mein Fehler ist sogar noch blöder:
Ich habe den Code immer ins Terminal gepastet. Ohne eine Leerzeile am Ende. Jetzt konnte ich das ganze einfach mit 'ENTER' starten......
:oops:

Verfasst: Donnerstag 29. November 2007, 21:43
von Leonidas
Davon abgesehen ist die 01 etwas unpraktisch, weil es bedeutet dass du die Zahl oktal angibst, d.h. mit acht als Basis. Tipp mal `012` ein, dann siehst du dass das nicht das gleiche ist wie `12`.

Verfasst: Donnerstag 29. November 2007, 21:50
von gerold
Hallo DocFisher!

Willkommen im Python-Forum!

Ich mache so etwas lieber mit dem Modul *datetime*. Aber so geht's auch:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import time


def main():
    ende = (2007, 11, 29, 21, 46, 0, 0, 0, 0)
    ablauf = time.mktime(ende)
    
    while True:
        jetzt = time.time()
        if jetzt >= ablauf:
            break
        diff = ablauf - jetzt + 1
        print time.asctime(), " -- ", time.strftime("%j %H:%M:%S", time.gmtime(diff))
        time.sleep(1)
    
    print time.asctime(), " -- ", "Fertig!"


if __name__ == "__main__":
    main()
Nur die Anzahl an Tagen wirst du nie unter 1 runter kriegen. Einen Tag 0 gibt es in unserem Datumssystem nicht. :-) Das lässt sich dann mit *datetime* einfacher lösen.

mfg
Gerold
:-)

Verfasst: Donnerstag 29. November 2007, 22:45
von DocFisher
Vielen Dank für die Tipps!!!

An der %j-immer-ein-Tag Problematik habe ich mich auch ein bischen aufgeraucht....
Ich werde es mal mit dem datetime Modul versuchen.
Da in 14 Tagen mein letztes Examen ist, wird erst ein bischen Zeit ins Land gehen. Ich konnte heute bloß die Bücher nicht mehr ausstehen, da sucht man sich bekanntlich ja gerne andere Projekte.

Aber ich bin begeistert ob des schnellen Supports hier im Forum! Vielen Dank und eine gute Nacht!!!