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

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
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Donnerstag 29. November 2007, 21:18

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ß
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Donnerstag 29. November 2007, 21:29

Schleife? Welche Schleife? Da sehe ich weder ein `while` noch ein `for`.
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Donnerstag 29. November 2007, 21:34

äää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:
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 29. November 2007, 21:43

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`.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Donnerstag 29. November 2007, 21:50

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
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
DocFisher
User
Beiträge: 50
Registriert: Donnerstag 29. November 2007, 21:04
Wohnort: Berlin
Kontaktdaten:

Donnerstag 29. November 2007, 22:45

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!!!
Antworten