# Schaltjahre # Autoren: Gunnar, Jan # Python 2.7.15 # 18.2.19 #Kalenderreform 1582 nicht beruecksichtigt import math as m monat = 0 #Anfangswert tag = 0 #Anfangswert monate = ["Januar", "Februar", "Maerz", "April", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"] #fuer Ausgabe als Monatsname einunddreissigtage = [1, 3, 5, 7, 8, 10, 12] #Monate mit 31 Tagen dreissigtage = [4, 6, 9, 11] #Monate mit 30 Tagen tagemonate = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] #Anzahl der Tage im Jahr, zu Beginn eines jeden Monats wochentage = ["Montag.", "Dienstag.", "Mittwoch.", "Donnerstag.", "Freitag.", "Samstag.", "Sonntag."] #fuer Ausgabe des Wochntags def EingabeMonat(): #integer Eingabe fuer Monat erzwingen global monat while True: try: monat = raw_input("Monat: ") monat = int(monat) break except ValueError: print "Bitte natuerliche Zahl eingeben!" def checkmonat(): #plausible Eingabe fuer Monat erzwingen global monat if monat > 12 or monat < 1: print "Fuer den Monat bitte Zahl zwischen 1 und 12 eingeben!" EingabeMonat() #wiederholte Falscheingaben abfangen checkmonat() def EingabeTag(): #integer Eingabe fuer Tag erzwingen global tag while True: try: tag = raw_input("Tag: ") tag = int(tag) break except ValueError: print "Bitte natuerliche Zahl eingeben!" def checktag(): #plausible Eingabe fuer Tag erzwingen global tag if tag > 31 or tag < 1: #unsinnige Zahlen fuer Tag ausschliessen print "Fuer den Tag bitte Zahl zwischen 1 und 31 eingeben!" EingabeTag() checktag() if monat in dreissigtage and tag > 30: #31 fuer Monate mit 30 Tagen ausschliessen print "Der", monate[monat - 1], "hat nur 30 Tage!" EingabeTag() checktag() if monat == 2 and tag > 29: #30 und 31 fuer Februar ausschliessen, 29 kann jetzt noch nicht ausgeschlossen werden print "Der Februar hat maximal 29 Tage!" EingabeTag() checktag() def Programm(): #Hauptfunktion print "" print "Berechnung von Schaltjahren und Wochentagen nach dem astronomischen Kalender:" #Einleitung print "Bitte geben Sie ein Datum ein." print "" while True: #interger Eingabe fuer Jahr erzwingen try: jahr = raw_input("Jahr: ") jahr = int(jahr) break except ValueError: print "Bitte natuerliche Zahl eingeben!" EingabeMonat() #Eingabefehler abfangen checkmonat() EingabeTag() checktag() schaltjahr = "kein Schaltjahr." #Kein Jahr ist ein Schaltjahr, if jahr % 4 == 0: #ausser es ist durch 4 teilbar, schaltjahr = "ein Schaltjahr." if jahr % 100 == 0: #es sei denn, es ist auch durch 100 teilbar, schaltjahr = "kein Schaltjahr." if jahr % 400 == 0: #aber trotzdem, wenn es auch durch 400 teilbar ist. schaltjahr = "ein Schaltjahr." tage = (jahr - 1)* 365 #Anfangswert für Anzahl der Tage vor dem gewaehlten Jahr if jahr >= 4: #Alle 4 Jahre tage = tage + m.floor(jahr / 4) #wird 1 Tag addiert. if jahr >= 100: #Alle 100 Jahre tage = tage - m.floor(jahr / 100) #wird ein Tag abgezogen. if jahr >= 400: #Alle 400 Jahre tage = tage + m.floor(jahr / 400) #wird ein Tag addiert. if monat < 3 and schaltjahr == "Schaltjahr.": #Liegt das gewaehlte Datum in einem Schaltjahr und im Januar oder Februar, tage = tage - 1 #wird ein Tag abgezogen. monatetage = tagemonate[monat - 1] #Anzahl der Tage im Jahr, zu Beginn des gewaehlten Monats jahrtage = monatetage + tag #Anzahl der Tage im Jahr, zum gewaehlten Datum tage = tage + jahrtage #Tage vor dem gewaehlten Jahr und Tage im gewaehlten Jahr werden addiert. if schaltjahr == "kein Schaltjahr." and monat == 2 and tag == 29: #Ausgabe für 29. Februar in einem Nicht-Schaltjahr print "Das Jahr", jahr, "ist kein Schaltjahr." print "Daher gibt es in diesem Jahr keinen 29. Februar" else: #Ausgabe regulaer print "" print "Das Jahr", jahr, "ist", schaltjahr print "Der", str(tag)+".", monate[monat - 1], str(jahr),"ist ein", wochentage[int(tage % 7 - 1)] #Teilt gesamte Tage durch Laenge einer Woche und ordnet dem Rest einen Wochentag zu. print "" print "Zum Berechnen eines weiteren Datums druecken Sie J. " nochmal = raw_input("Beenden des Programms mit beliebiger Taste. ") if nochmal == "j" or nochmal == "J": #ermoeglicht mehrmaliges Durchlaufen der Hauptfunktion Programm() Programm()#hier startet das Programm