Lernplan erstellen: Zeiträume vergleichen, visualisieren

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
ahnungslos
User
Beiträge: 1
Registriert: Donnerstag 20. März 2014, 19:07

Hallo liebe Mehrwissende,
ich möchte mit Python einen Lernplan für anstehende Klausuren erstellen. Das Programm soll bestenfalls:
- den Stundenplan einlesen (Uni) mit Datum, Uhrzeit, Titel (einfach Datei mit Vorlesungszeiten erstellen?!)
- Klausurdaten (Datum, Uhrzeit, Titel) entgegennehmen und in einer txt-Datei speichern (hab ich hinbekommen) mit datetime.datetime - wie kann ich Zeiträume vergleichen? Ich will pro Termin 2 Stunden blocken, dann muss ich ja bei jedem neuen Eintrag prüfen, ob 2 Stunden davor und danach was anderes liegt?!
- Gernerierung eines Lernplans für den Zeitraum [heute] bis letzte Klausur und Darstellung (xml?)
Ich habe leider gar keine Ahnung, wie ich das umsetzen könnte. Soweit ich das verstanden habe, eignen sich Datenbanken nicht.

Vielen Dank für Tipps und jede noch so kleine Hilfe!!
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@ahnungslos
Was Dein Programm einmal leisten soll, ist IMHO nicht ganz trivial. Letzlich ein Taskmanager wie z. B. taskwarrior (in C++ geschrieben) oder TaskCoach (in Python geschrieben).
Zuerst würde ich mir mal Gedanken darüber machen, wie Du einen "Zeitraum" darstellen möchtest. Unter darstellen meine ich jetzt nicht die visuelle Darstellung, sondern in welcher Form (Klasse, dictionary...) ein solcher Zeitraum innerhalb der Logik Deines Programms besteht.
Wenn Du dann eine solche Form gefunden hast, geht es als nächstes darum, diese Zeiträume wie von Dir erwartet zu sortieren. Also z. B. aufsteigende Zeit mit jeweils 2 Stunden davor und danach.
Wenn das grundsätzlich funktioniert, überlegst Du Dir, in welcher Form die Zeitraum-Objekte gefüllt werden, z. B. aus Datei einlesen, per commandline übergeben, via GUI oder TUI vom Nutzer eingeben lassen.

Zu Deiner konkreten Frage des Vergleichs von Zeiträumen:

Code: Alles auswählen

>>> import datetime
>>> datetime.datetime(2014, 3, 21, 8, 0) > datetime.datetime(2014, 3, 21, 7, 15)
True
>>> delta = datetime.datetime(2014, 3, 21, 8, 0) - datetime.datetime(2014, 3, 21, 7, 15)
>>> delta.seconds / 60
45
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
BlackJack

@ahnungslos: Nimm am besten eine Trennung zwischen der externen Repräsentation und der Programmlogik vor. Sowohl was die Eingabedaten als auch was das Ergebnis des Programms angeht. Dann kann man das Einlesen der Daten und das schreiben des Ergebnis unabhängig vom eigentlichen Algorithmus zum erstellen des Lernplans ändern, oder auch verschiedene Möglichkeiten zur Verfügung stellen. Denn für das erstellen des Lernplans ist es ja egal ob der Stundenplan aus einer CSV-Datei, Exceltabelle, oder einem Onlinekalender kommt. Genau das gleiche mit den Klausurdaten oder dem Ausgabeformat.

Für den Anfang würde ich für alles möglichst einfache Datenformate verwenden, also was sowohl für den Menschen als auch für den Rechner möglichst einfach bearbeitet werden kann. Wenn die Daten nicht verschachtelt sind, bieten sich CSV-Dateien an, ansonsten zum Beispiel JSON. Für beides gibt es Module in der Standardbibliothek.

Und dann musst Du Dir überlegen wie man die Daten in einzelne Typen aufteilen kann und welche Operationen die benötigen. Für die Frage mit dem Vergleichen von Zeiträumen kann man offensichtlich einen Typ gebrauchen der einen Termin repräsentiert und der nach Anfangszeit sortierbar ist, und zum Beispiel eine Operation anbietet mit der man prüfen kann ob ein gegebener Termin mit einem anderen gegebenen Termin überlappt.
Antworten