Dienstag, 22. Mai 2012

Kursliste

Ich habe mir ein Programm geschrieben, dass mir Kurslisten mit Wochentag und Datum für einen Zeitraum ausgibt. Ich benötige das fürs Kursprotokoll.
''' Kursliste.py
Tool: Kursliste
Version: 0.1.0
Autor: pixewakb
Lizenz: Nicht spezifiziert
Beschreibung: Kleines Skript, das in einem gegebenen
Zeitraum alle Wochentage ausgibt, an denen eine
Seminarveranstaltung stattfinden könnte. Ferientage
usw. werden nicht berücksichtigt.
'''
import calendar

# BENUTZEREINGABEN  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
startDatum = [2012,5,28]
endDatum = [2012,7,13]
wochentage = ["Dienstag"]
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

wochentag = {0:"Montag",
             1:"Dienstag",
             2:"Mittwoch",
             3:"Donnerstag",
             4:"Freitag",
             5:"Samstag",
             6:"Sonntag"}

month = {1:"Januar",
         2:"Februar",
         3:"März",
         4:"April",
         5:"Mai",
         6:"Juni",
         7:"Juli",
         8:"August",
         9:"September",
         10:"Oktober",
         11:"Dezember",
         12:"Dezember"}

jahr = startDatum[0]
monat = startDatum[1]

while True:
    aktuellerMonat = calendar.monthcalendar(jahr,monat)
    for weak in aktuellerMonat:
        for wochentagnr, tag in enumerate(weak):

            if jahr == startDatum[0] and monat == startDatum[1] and tag < startDatum[2]:
                # Termin ist frueher als das Startdatum, also ausserhalb des Zeitraums
                    pass
            elif jahr == endDatum[0] and monat == endDatum[1] and tag > endDatum[2]:
                # Termin ist spaeter als das Enddatum, also ausserhalb des Zeitraums
                    pass
            else:
                # Wenn der Termin im Zeitraum liegt, dann pruefe
                if wochentag[wochentagnr] in wochentage and tag != 0:
                    print(wochentag[wochentagnr][:2] + '., ' + str(tag).zfill(2) + '.' + str(monat).zfill(2) + '.')

    if monat == 12:
        jahr += 1
        monat = 1
    else:
        monat += 1

    if jahr == endDatum[0] and monat > endDatum[1]:
        break
Wahrscheinlich kann man die while-Schleife und die if-Bedingungen (code smell) weiter optimieren, ich habe aber gerade nicht die Zeit und Muße das sauber zu programmieren.