Der Funktionsame ist ja quasi richtig aber der sollte halt nicht sein, weil der Inhalt der Funktion nicht so sein sollte. Funktionen sollten möglichst einen Job erledigen und einzeln testbar sein.
Die Funktion hat die Aufgabe die übergebenen Argumente zu prüfen. Was aber bringt eine Prüfung wenn nicht auf das Prüfergebnis reagiert wird je nachdem wie es ausfällt? Die Funktion hat also bereits an dieser Stelle zwei Jobs: Prüfen und Reagieren.
Jetzt gibt es verschiedene Möglichkeiten der Eingabe und auch der Falscheingabe. Deshalb wird die Prüfung aufgeteilt. Hier durch die If Abfrage.
Als erstes wird geprüft ob das 1. Argument vielleicht genau eine "99" ist. 99 Ist die vorgesehene Eingabe um den Wecker auszustellen, die Weckzeit zu löschen. Was dann auch geschieht. Danach wird das Programm beendet. Wie ich weiter oben schon schrieb, gibt es ja in diesem Fall auch keinen Grund für das Programm weiter zu laufen. Prüfung >> direkte Reaktion auf Ergebnis der Prüfung.
Als nächstes kommt das elif. Hier wird geprüft ob Argument 1 + 2 im jeweils richtigen Bereich liegen. Tun sie das nicht, Wird der entsprechende Hinweis gegeben wie die Eingabe zu erfolgen hat und in welchen Bereichen sich die Eingaben befinden müssen.
Haben die Argumente diese Prüfungen überstanden gehts weiter im Programm. Aber halt. was wenn jemand gar nichts eingibt oder es gar mit Buchstaben versucht? Dan greifen die Ausnahmeregelungen aus dem except. Weisen darauf hin, dass nur Ziffern akzeptiert werden und beendet das Programm.
Natürlich kann man daraus 2 Funktionen machen. Man kann auch die Stunden und Minuten in einer jeweils getrennten Funktion überprüfen. Und dann kommt der nächste und sagt, dass man das aber auch alles in einer Funktion zusammenfassen kann. Viele Wege führen zum Ziel. Ob nun Weg a oder Weg b der "bessere" oder "schönere" ist sei da mal dahin gestellt.
Das erste exit() konnte übrigens tatsächlich weg, die beiden anderen müssen aber bleiben. Die haben einen Sinn. Sie unterdrücken die Fehlermeldungen des Systems und geben ausschließlich den von mir für den jeweiligen Fall vorgesehenen Text aus.
Beim Range verstehe ich was du meinst, aber da wir hier nicht von Listen mit 1,8 Millionen Einträgen reden sonder 24 bzw 60 sind diese Bedenken m. E. vernachlässigbar. Auch hier: Änder ich es (wieder zurück, das hatte ich ja schon mal) kommt der nächste und meint "Ich mach das aber anders..." Zusätzlich werden die Eingaben auch noch auf der Webseite auf Richtigkeit geprüft, <input type="number">
Zu der Sache mit dem Path hast du jetzt zwei mal vage Andeutungen gemacht, dann mach aber auch mal "Butter bei die Fische".
Thema Sniper: Ich glaube dem Programm ist es egal ob es jetzt von einem Python Script oder einem professionellen Bashkiller abgeschossen wird.
Das Bashscript "sniper" habe ich auch für andere Sachen im Einsatz. Es hat sich bewährt und ist doch völlig ausreichend. Nur des guten Geschmacks wegen werd ich da jetzt nichts neues schreiben.
Eine gute Nacht, ich mach jetzt Schluss
Thorsten