Wecker weckt nicht

  • Hallo,

    eigentlich wollte ich ein wenig mit argv rumprobieren. Dazu kam mir die Idee einen Wecker zu programmieren, bei dem die Weckzeit als Arkument beim Aufruf mitgegeben wird. Das hat auch schneller geklappt als ich erwartete.

    Aber leider komme ich mit der anschliessenden Weckfunktion nicht weiter. Egal was ich auch bisher versucht habe ist das Ergebnis, dass er entweder nicht weckt (Printzeile "Kikeriki") oder aber EOF, Syntax oder unexpected unident Fehler ausgibt.

    Erreichen möchte ich, dass in der Schleife die Jetzt-Zeit (uhrzeit) mit der gesetzten Weckzeit (weckzeit) verglichen wird und solange diese nicht übereinstimmt soll er 1 Sekunde warten vor dem erneuten überprüfen. Stimmen beide Werte dann irgendwann überein soll die "Kikeriki" Zeile ausgegeben werden.

    Eigentlich ging ich davon aus, dass das der einfachere Teil wäre, bekomme es aber einfach nicht hin.

    Ich weiß. es gibt bestimmt bessere Arten einen Wecker zu programmieren, aber ich würde gern erst mal das hier zum laufen bekommen.

    Hier der Code, es geht nur um den unteren Teil ab # Zeit prüfen und wecken. Aufgerufen wird mit ./wecken 20 15 für 20:15 Uhr Weckzeit.

  • Wenn du deine Weckzeit eingibst ist das ein Int?

    Das time(hour=stunde, minute=minute).strftime("%H:%M:%S") gibt einen String zurück,

    Wenn du dann Int mit string vergleichst wird das nicht funktionieren.

  • Das time(hour=stunde, minute=minute).strftime("%H:%M:%S") gibt einen String zurück,

    Wenn du dann Int mit string vergleichst wird das nicht funktionieren.

    Danke. Diesen Fehler hatte ich überhaupt nicht auf dem Radar. Habe ich jetzt behoben und erst einmal hiermit getestet:

    Code
    weckzeit = time(hour=stunde, minute=minute).strftime("%H:%M")
    weckzeit = str(weckzeit)
    uhrzeit = datetime.now().strftime("%H:%M")
    uhrzeit = str(uhrzeit)
    print ("Jetzt ist es",uhrzeit,"Uhr.")
    print ("Wecken um", weckzeit,"Uhr.")
    if uhrzeit == weckzeit:
        print ("Urzeit ist gleich Weckzeit")
    else:
        print ("Ungleich")

    das funktioniert auch soweit.

    wenn ich aber im Script jetzt: (ich hab die Sekunden :%S rausgenommen, lässt sich so besser testen.

    ausführe, dann bekomme ich:

    Code
      File "./wecken", line 58
        
        ^
    SyntaxError: unexpected EOF while parsing

    Wobei "line 58" das Ende des Scripts und nur eine leere Zeile ist.

    Ich bin noch am Googeln, aber ich hab noch keine mir verständlich Erklärung gefunden, was diesen Fehler verursacht (Oder ich bin zu doof :baeh2: )

    Den einzigen Unterschied, den ich zu den anderen beiden while Trues sehe ist die exception. Soll ich jetzt eine Exeption für EOF Fehler einfügen? Kann ich mir nicht vorstellen.

  • Ich habe es rausgefunden. Ersteinam musste ich das try: weglassen. Dann klappte es.

    Code
    while True:
    
        uhrzeit = (datetime.now().strftime("%H:%M"))
        uhrzeit = str(uhrzeit)
        if uhrzeit == weckzeit:
            print ("Kikeriki")
            break
        else:
            sleep(1)

    Aber danke trotzdem für den Denkanstoß mit dem String.


  • Mit Sound:

  • Python: wecker

    Ich weiß. es gibt bestimmt bessere Arten einen Wecker zu programmieren, aber ich würde gern erst mal das hier zum laufen bekommen.

    Jepp! Da sind sie ja, die besseren Arten einen Wecker zu programmieren. Danke, da brauche ich noch eine Weile, bis ich diese Codes halbwegs verstehe :)

    Eigentlich ging es mir ja darum zu testen, ob ich das mit dem argv verstanden habe und anwenden kann. Ich brauch da aber keine Beispiele wie man sie an jeder Ecke im Netz findet, sondern irgend etwas "sinnvoles", da fiel mir halt ein einen Wecker damit zu machen. Dass das mit dem argv auf Anhieb klappt und dann der Fehler ganz woanders kommt war so gar nicht geplant.

    Sound wollte ich auch nicht, ich lasse mich lieber mit Licht wecken. Aber was letztlich für eine Aktion ausgeführt wird ist ja auch egal.

    In deinen beiden Codes sind Sachen drin mit denen ich mich, nach und nach, auch noch beschäftigen möchte, wie z. B dieses __init__ und self. Diese beiden Sachen sind mir schon in einigen anderen Codebeispielen aufgefallen. Gibt noch mehr, aber diese beiden sind mir direkt ins Auge gesprungen.

    Mein Problem bei so Sachen ist oft, genau die Erklärung mit Beispielen zu finden, bei der bei mir der Groschen fällt. :)

    Aber Danke für die beiden Beispiele.

  • Hallo,

    , auch noch beschäftigen möchte, wie z. B dieses __init__ und self.

    das Stichwort dafür ist: objektorientierte Programmierung

    Mein Problem bei so Sachen ist oft, genau die Erklärung mit Beispielen zu finden,

    https://docs.python.org/3/tutorial/classes.html

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • das Stichwort dafür ist: objektorientierte Programmierung

    Danke,

    oft hängt es tatsächlich nur am richtigen Stichwort/Suchbegriff um ein Stück weiter zu kommen.

    Zu deinem Link: Grundsätzlich ist mein Englisch gar nicht schlecht, aber so grundlegende, neue Sachen verstehe ich mit deutschen Erklärungen dann doch besser. Wenn ich erst mal weiß worum es eigentlich geht ist das dann auch auf englisch problemloser. Aber dank des Stichwortes "Klassen" hab ich auch direkt was auf deutsch gefunden Link . Da werde ich mich auf jeden Fall mal mit beschäftigen.

  • Es gibt auch noch was offizielles von Python auf deutsch, ist zwar Python 3.3 aber für die Grundlagen sollte das schon in Ordnung sein:

    https://readthedocs.org/projects/py-tu…pdf/python-3.3/

    Ja, ist mir eben auch aufgefallen, dass mein Link auf eine Python 2 Anleitung linkt. Da das Thema aber bei Python 3 auf der Seite nicht mehr behandelt wird denke ich mal dass sich da nichts an der Erklärung geändert hat. Auf jeden Fall haben die schöne Beispiele, ich liebe Erdbeerkuchen :lol:

    Dein verlinktes PDF habe ich jedenfalls direkt abgespeichert.

  • Eigentlich ging es mir ja darum zu testen, ob ich das mit dem argv verstanden habe und anwenden kann. Ich brauch da aber keine Beispiele wie man sie an jeder Ecke im Netz findet, sondern irgend etwas "sinnvoles", da fiel mir halt ein einen Wecker damit zu machen.

    Dann lass die Logik weg und schau dir erst mal Listen an, dann argparse und für später click/typer.

    Gibt noch andere Module/Packages von Drittanbietern wie z.B. docopt (Hilfe schreiben -> generiert Parser).

  • Dann lass die Logik weg und schau dir erst mal Listen an, dann argparse und für später click/typer.

    Gibt noch andere Module/Packages von Drittanbietern wie z.B. docopt (Hilfe schreiben -> generiert Parser).

    Alles mal überflogen und direkt Sachen entdeckt die ich ausprobieren muss. Ach wie schön wenn man 3 Wochen Urlaub und eh nichts besonderes vor hat... :lol:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!