Browse Source

Eingabefehler abfangen fertig

stguegen 5 years ago
parent
commit
cd7ac5a546
1 changed files with 65 additions and 42 deletions
  1. 65 42
      Schaltjahr1.py

+ 65 - 42
Schaltjahr1.py

@@ -1,61 +1,83 @@
 # Schaltjahre
 # Schaltjahre
 # Autoren: Gunnar, Jan
 # Autoren: Gunnar, Jan
 # Python 2.7.15
 # 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
 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:
     while True:
         try:            
         try:            
             monat = raw_input("Monat: ")
             monat = raw_input("Monat: ")
             monat = int(monat)
             monat = int(monat)
             break
             break
         except ValueError:
         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!"
         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:
     while True:
         try:            
         try:            
             tag = raw_input("Tag: ")
             tag = raw_input("Tag: ")
             tag = int(tag)
             tag = int(tag)
             break
             break
         except ValueError:
         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!"
         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!"
         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!"
         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,
     schaltjahr = "kein Schaltjahr." #Kein Jahr ist ein Schaltjahr,
     if jahr % 4 == 0:              #ausser es ist durch 4 teilbar,
     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.
             if jahr % 400 == 0:    #aber trotzdem, wenn es auch durch 400 teilbar ist.
                 schaltjahr = "ein Schaltjahr."
                 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
     if jahr >= 4:                       #Alle 4 Jahre
         tage = tage + m.floor(jahr / 4) #wird 1 Tag addiert.
         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,
     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.
         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.
     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 "Das Jahr", jahr, "ist kein Schaltjahr."
         print "Daher gibt es in diesem Jahr keinen 29. Februar"
         print "Daher gibt es in diesem Jahr keinen 29. Februar"
-    else:
+    else: #Ausgabe regulaer
         print ""
         print ""
         print "Das Jahr", jahr, "ist", schaltjahr
         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 ""
     print "Zum Berechnen eines weiteren Datums druecken Sie J. "
     print "Zum Berechnen eines weiteren Datums druecken Sie J. "
     nochmal = raw_input("Beenden des Programms mit beliebiger Taste. ")
     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()
+Programm()#hier startet das Programm