|
@@ -1,61 +1,83 @@
|
|
|
# Schaltjahre
|
|
|
# Autoren: Gunnar, Jan
|
|
|
# Python 2.7.15
|
|
|
-# 2.2.19
|
|
|
+# 18.2.19
|
|
|
|
|
|
-#noch zu erledigen: Eingabefehler abfangen in Funktion packen, um Falscheingabe im x-ten Versuch abzufangen.
|
|
|
+
|
|
|
+#Kalenderreform 1582 nicht beruecksichtigt
|
|
|
|
|
|
import math as m
|
|
|
|
|
|
-monate = ["Januar", "Februar", "Maerz", "April", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
|
|
|
-einunddreissigtage = [1, 3, 5, 7, 8, 10, 12]
|
|
|
-dreissigtage = [4, 6, 9, 11]
|
|
|
-def Programm():
|
|
|
- print ""
|
|
|
- print "Bitte geben Sie ein Datum ein."
|
|
|
- print ""
|
|
|
- while True:
|
|
|
- try:
|
|
|
- jahr = raw_input("Jahr: ")
|
|
|
- jahr = int(jahr)
|
|
|
- break
|
|
|
- except ValueError:
|
|
|
- print "Bitte natuerliche Zahl eingeben!"
|
|
|
+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!"
|
|
|
- if monat > 12:
|
|
|
+ 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!"
|
|
|
- monat = input("Monat: ")
|
|
|
+ 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!"
|
|
|
- if tag > 31:
|
|
|
+ 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!"
|
|
|
- tag = input("Tag: ")
|
|
|
- if monat in einunddreissigtage and tag > 31:
|
|
|
- print "Der", monate[monat - 1], "hat nur 31 Tage!"
|
|
|
- tag = input("Tag: ")
|
|
|
- elif monat in dreissigtage and tag > 3:
|
|
|
+ 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!"
|
|
|
- tag = input("Tag: ")
|
|
|
- elif monat == 2 and tag > 29:
|
|
|
+ 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!"
|
|
|
- tag = input("Tag: ")
|
|
|
+ EingabeTag()
|
|
|
+ checktag()
|
|
|
|
|
|
- tagemonate = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] #Anzahl der Tage im Jahr, zu Beginn eines jeden Monats
|
|
|
- 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
|
|
|
-
|
|
|
- wochentage = ["Montag.", "Dienstag.", "Mittwoch.", "Donnerstag.", "Freitag.", "Samstag.", "Sonntag."]
|
|
|
+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,
|
|
@@ -65,8 +87,7 @@ def Programm():
|
|
|
if jahr % 400 == 0: #aber trotzdem, wenn es auch durch 400 teilbar ist.
|
|
|
schaltjahr = "ein Schaltjahr."
|
|
|
|
|
|
-
|
|
|
- tage = (jahr - 1)* 365 #Anzahl Tage gesamt, zu Beginn des gewaehlten Jahrs
|
|
|
+ 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.
|
|
@@ -78,18 +99,20 @@ def Programm():
|
|
|
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:
|
|
|
+
|
|
|
+ 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:
|
|
|
+ else: #Ausgabe regulaer
|
|
|
print ""
|
|
|
print "Das Jahr", jahr, "ist", schaltjahr
|
|
|
- print "Das gewaehlte Datum ist ein", wochentage[int(tage % 7 - 1)] #Teilt gesamte Tage durch Laenge einer Woche und ordnet dem Rest einen Wochentag zu.
|
|
|
+ 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":
|
|
|
+ if nochmal == "j" or nochmal == "J": #ermoeglicht mehrmaliges Durchlaufen der Hauptfunktion
|
|
|
Programm()
|
|
|
-Programm()
|
|
|
+Programm()#hier startet das Programm
|