Zum Einstieg in die Programmiersprache Python habe ich ein Programm zur Wochentagsberechnung nach dem Gregorianischen Kalender geschrieben. Es ist ein einfaches Programm, dass bei Eingabe eines Datums (z.B. 13.05.2010) den dazugehörigen Wochentag ausgibt. Wer also wissen möchte, an welchem Tag er geboren wurde oder wann das nächste Weihnachten ist, kann das Programm gerne mal ausprobieren.
Es kann im Windows Kommandozeileninterpreter mit python prorgrammpfad (z.B. python C:\Users\bennyn\Desktop\wochentag.py) aufgerufen werden. Python muss dazu installiert sein. Für alle Benutzer von Microsoft Windows empfehle ich ActivePython.
Python ist übrigens die 10. Programmiersprache, die ich im Rahmen meines Studiums lerne.
Quelltext:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | print "- WOCHENTAGSBERECHNUNG nach dem GREGORIANISCHEN KALENDAR -\n" print "Dieses Programm berechnet nach Eingabe eines Datums\n(im Format TT.MM.JJJJ) den dazugehoerigen Wochentag.\n"; def tagesziffer(tag): return tag%7; def monatsziffer(monat): if monat == 1: ergebnis = 0 elif monat == 2: ergebnis = 3 elif monat == 3: ergebnis = 3 elif monat == 4: ergebnis = 6 elif monat == 5: ergebnis = 1 elif monat == 6: ergebnis = 4 elif monat == 7: ergebnis = 6 elif monat == 8: ergebnis = 2 elif monat == 9: ergebnis = 5 elif monat == 10: ergebnis = 0 elif monat == 11: ergebnis = 3 elif monat == 12: ergebnis = 5 else: print "Falsche Eingabe." return ergebnis; def jahresziffer(jahr): jahreszahl = jahr%100; jahreszahl2= jahreszahl/4; return (jahreszahl+jahreszahl2)%7; def jahrhundertziffer(jahr): return (3-((jahr/100)%4))*2; def schaltjahr(jahr): return (1 if( ((jahr % 4 == 0) and ((jahr % 100) != 0)) or (jahr % 400) == 0 ) else 0); def schaltjahreskorrektur(monat,jahr): return (6 if( (schaltjahr(jahr) == 1) and (monat == 1 or monat == 2) ) else 0); def ausgabe(ergebnis): if ergebnis == 0: return "\nDer eingegebene Tag war ein Sonntag." elif ergebnis == 1: return "\nDer eingegebene Tag war ein Montag." elif ergebnis == 2: return "\nDer eingegebene Tag war ein Dienstag." elif ergebnis == 3: return "\nDer eingegebene Tag war ein Mittwoch." elif ergebnis == 4: return "\nDer eingegebene Tag war ein Donnerstag." elif ergebnis == 5: return "\nDer eingegebene Tag war ein Freitag." elif ergebnis == 6: return "\nDer eingegebene Tag war ein Samstag." ######################## # DEBUG-INFORMATIONEN: # ######################## #print tagesziffer(tag); #print monatsziffer(monat); #print jahresziffer(jahr); #print jahrhundertziffer(jahr); #print schaltjahreskorrektur(monat,jahr); #print schaltjahr(jahr); ######################## # TEST-EINGABEN: # ######################## # 18.01.1892 (Montag) # 28.07.1987 (Dienstag) # 12.05.2010 (Mittwoch) # 09.11.1989 (Donnerstag) # 25.12.2026 (Freitag) # 01.01.2000 (Samstag) # 29.02.1604 (Sonntag) eingabe_tag = input("Bitte einen Tag eingeben (Bsp. 27): "); eingabe_monat = input("Bitte einen Monat eingeben (Bsp. 12): "); eingabe_jahr = input("Bitte ein Jahr angeben (Bsp. 2010): "); ergebnis = ( tagesziffer(eingabe_tag) +monatsziffer(eingabe_monat) +jahresziffer(eingabe_jahr) +jahrhundertziffer(eingabe_jahr) +schaltjahreskorrektur(eingabe_monat,eingabe_jahr) )%7; print ausgabe(ergebnis); |
Schöne Seite hast du da!
Das Skript ist auch sehr nützlich – alleridngs hat sich ein kleiner Fehler eingeschlichen: in Zeile 31/31 muss es Monat ’12‘ statt ’11‘ sein, ansonsten gibt es ein Error bei Eingabe des Monats Dezember.
Wäre doch leicht mögich auch vertippte Eingaben wie ’13‘ abzufangen z.B. mittels else: eine Fehlermeldung ausgeben oder abzubrechen.
Hallo Gero! Vielen Dank für deinen hilfreichen Kommentar. Ich habe deine Anmerkungen sofort umgesetzt. 🙂 Programmierst du viel mit Python?
Hallo bennyn,
ich habe Python im Studium gelernt und neulich zum ersten mal privat ein kleines Programm geschrieben, welches einen Kalender mit Daten einer Textdatei in eine html-Tabelle verwandelt (siehe Homepage der Feuerwehr -> Kalender). Dabei habe ich mich bei der Berechnung der Wochentagnamen an deinen Vorschlag orientiert. Übrigens vielen Dank dafür!!
ach noch etwas ist mir gerade aufgefallen, als ich an einem anderen PC mit Python 3.2.2 statt 3.2 saß: ergebnis ist dort eine Gleitkommazahl und muss mit int(ergebnis) der Ausgabe zugeführt werden, da sonst „none“ statt des Wochentages ausgegeben wird. Scheint nun wieder zu funktionieren.
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import datetime
##########################################################################################
def Day2Short(Tag, LongFormat):
Ergebnis = [ [„Mo“, „Di“, „Mi“, „Do“, „Fr“, „Sa“, „So“],
[„Montag“, „Dienstag“, „Mittwoch“, „Donnerstag“, „Freitag“, „Samstag“, „Sonntag“]
]
return Ergebnis[LongFormat][Tag]
Datum = datetime.date(2011, 10, 25)
print „Longform :“, Day2Short(Datum.weekday(), True)
print „Shortform:“, Day2Short(Datum.weekday(), False)