Zeit Script

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
NesteaHD
User
Beiträge: 1
Registriert: Samstag 25. August 2012, 14:49

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
Zuletzt geändert von Hyperion am Dienstag 9. Oktober 2012, 17:24, insgesamt 1-mal geändert.
Grund: Quellcode in Python-Code-Tags gesetzt
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten