Seite 1 von 1

Zeit Script

Verfasst: Dienstag 9. Oktober 2012, 14:02
von NesteaHD
Hi Leute,

ich versuche gad ein Script zu schreiben welches die eingegebene Zeit mit der PC Zeit abgleicht und sobald es eine Übereinstimmung hat aufhört und eine bestimmte Aktion ausführt. Funktioniert aber so nicht :(

Code: Alles auswählen

from time import*
import time

pctime = mktime(time.localtime())

print("Zeit:")
print("")

year = int(input("Jahr:"))
month = int(input("Monat:"))
day = int(input("Tag:"))
hour = int(input("Stunde:"))
minu = int(input("Minute:"))
sec = int(input("Sekunde:"))
print("")

inputtime = (year, month, day, hour, minu, sec, 0, 0, 0)
inputtime = mktime(inputtime)

print(pctime)
print(inputtime)

while 1:
    pctime = mktime(time.localtime())

    if pctime == inputtime:
        print("done")
        break


Vielleicht kann mir ja einer von euch weiterhelfen :)

Danke im Voraus & Gruss

Re: Zeit Script

Verfasst: Dienstag 9. Oktober 2012, 17:35
von Hyperion
Bist Du denn sicher, dass die beiden Objekte irgendwann definitiv einmal gleich sind? Das könnte zum einen an verschiedenen Formaten liegen oder eben einfach daran, dass die Systemzeit nicht auf Deiner untersten Genauigkeit aktualisiert wird.

Zum Code:

- Du solltest Dir Sternchen-Importe abgewöhnen. Zudem importierst Du ``time`` ja auch richtig - wozu dann noch der andere import?

- Endlosschleifen formuliert man am besten mit einem nativen Wahrheitswert. Python bietet dafür die beiden Objekte ``True`` und ``False``; in Deinem Falle also:

Code: Alles auswählen

while True:
    pass
- Ziele 4 ist überflüssig:

Code: Alles auswählen

pctime = mktime(time.localtime())
Du bindest doch *vor* dem Vergleich in der Schleife den Namen ständig neu. Also musst Du nix initialisieren. Und in Python musst Du schon gar nichts deklarieren.

- Dieses

Code: Alles auswählen

inputtime = (year, month, day, hour, minu, sec, 0, 0, 0)
inputtime = mktime(inputtime)
lässt sich auch in einer Zeile formulieren:

Code: Alles auswählen

inputtime = mktime((year, month, day, hour, minu, sec, 0, 0, 0))
Wenn Du ein Objekt nicht mehr als an einer Stelle brauchst und es nicht der Übersicht / Leserlichkeit dienlich ist, so musst Du es nicht an einen separaten Namen binden und schon gar nicht an denselben, den Du im Anschluss erneut an ein neues Objekt bindest.

- das gilt letztlich auch hierfür:

Code: Alles auswählen

   pctime = mktime(time.localtime())
   if pctime == inputtime:
Auch hier kannst Du doch *direkt* im ``if``-Ausdruck gegen die ``localtime`` vergleichen:

Code: Alles auswählen

    if pctime == mktime(time.localtime()):
- Bei Deiner Eingaberoutine könnte man überlegen, ob man das nicht lieber als *ein* String einlesen will und aus diesem mittels geeigneter Parsing-Methode das Zeitobjekt generieren lassen will. ``datetime.strptime`` sollte die geeignete Funktion dafür sein.