Schaltjahr1.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. # Schaltjahre
  2. # Autoren: Gunnar, Jan
  3. # Python 2.7.15
  4. # 18.2.19
  5. #Kalenderreform 1582 nicht beruecksichtigt
  6. import math as m
  7. monat = 0 #Anfangswert
  8. tag = 0 #Anfangswert
  9. monate = ["Januar", "Februar", "Maerz", "April", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"] #fuer Ausgabe als Monatsname
  10. einunddreissigtage = [1, 3, 5, 7, 8, 10, 12] #Monate mit 31 Tagen
  11. dreissigtage = [4, 6, 9, 11] #Monate mit 30 Tagen
  12. tagemonate = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] #Anzahl der Tage im Jahr, zu Beginn eines jeden Monats
  13. wochentage = ["Montag.", "Dienstag.", "Mittwoch.", "Donnerstag.", "Freitag.", "Samstag.", "Sonntag."] #fuer Ausgabe des Wochntags
  14. def EingabeMonat(): #integer Eingabe fuer Monat erzwingen
  15. global monat
  16. while True:
  17. try:
  18. monat = raw_input("Monat: ")
  19. monat = int(monat)
  20. break
  21. except ValueError:
  22. print "Bitte natuerliche Zahl eingeben!"
  23. def checkmonat(): #plausible Eingabe fuer Monat erzwingen
  24. global monat
  25. if monat > 12 or monat < 1:
  26. print "Fuer den Monat bitte Zahl zwischen 1 und 12 eingeben!"
  27. EingabeMonat() #wiederholte Falscheingaben abfangen
  28. checkmonat()
  29. def EingabeTag(): #integer Eingabe fuer Tag erzwingen
  30. global tag
  31. while True:
  32. try:
  33. tag = raw_input("Tag: ")
  34. tag = int(tag)
  35. break
  36. except ValueError:
  37. print "Bitte natuerliche Zahl eingeben!"
  38. def checktag(): #plausible Eingabe fuer Tag erzwingen
  39. global tag
  40. if tag > 31 or tag < 1: #unsinnige Zahlen fuer Tag ausschliessen
  41. print "Fuer den Tag bitte Zahl zwischen 1 und 31 eingeben!"
  42. EingabeTag()
  43. checktag()
  44. if monat in dreissigtage and tag > 30: #31 fuer Monate mit 30 Tagen ausschliessen
  45. print "Der", monate[monat - 1], "hat nur 30 Tage!"
  46. EingabeTag()
  47. checktag()
  48. if monat == 2 and tag > 29: #30 und 31 fuer Februar ausschliessen, 29 kann jetzt noch nicht ausgeschlossen werden
  49. print "Der Februar hat maximal 29 Tage!"
  50. EingabeTag()
  51. checktag()
  52. def Programm(): #Hauptfunktion
  53. print ""
  54. print "Berechnung von Schaltjahren und Wochentagen nach dem astronomischen Kalender:" #Einleitung
  55. print "Bitte geben Sie ein Datum ein."
  56. print ""
  57. while True: #interger Eingabe fuer Jahr erzwingen
  58. try:
  59. jahr = raw_input("Jahr: ")
  60. jahr = int(jahr)
  61. break
  62. except ValueError:
  63. print "Bitte natuerliche Zahl eingeben!"
  64. EingabeMonat() #Eingabefehler abfangen
  65. checkmonat()
  66. EingabeTag()
  67. checktag()
  68. schaltjahr = "kein Schaltjahr." #Kein Jahr ist ein Schaltjahr,
  69. if jahr % 4 == 0: #ausser es ist durch 4 teilbar,
  70. schaltjahr = "ein Schaltjahr."
  71. if jahr % 100 == 0: #es sei denn, es ist auch durch 100 teilbar,
  72. schaltjahr = "kein Schaltjahr."
  73. if jahr % 400 == 0: #aber trotzdem, wenn es auch durch 400 teilbar ist.
  74. schaltjahr = "ein Schaltjahr."
  75. tage = (jahr - 1)* 365 #Anfangswert für Anzahl der Tage vor dem gewaehlten Jahr
  76. if jahr >= 4: #Alle 4 Jahre
  77. tage = tage + m.floor(jahr / 4) #wird 1 Tag addiert.
  78. if jahr >= 100: #Alle 100 Jahre
  79. tage = tage - m.floor(jahr / 100) #wird ein Tag abgezogen.
  80. if jahr >= 400: #Alle 400 Jahre
  81. tage = tage + m.floor(jahr / 400) #wird ein Tag addiert.
  82. if monat < 3 and schaltjahr == "Schaltjahr.": #Liegt das gewaehlte Datum in einem Schaltjahr und im Januar oder Februar,
  83. tage = tage - 1 #wird ein Tag abgezogen.
  84. monatetage = tagemonate[monat - 1] #Anzahl der Tage im Jahr, zu Beginn des gewaehlten Monats
  85. jahrtage = monatetage + tag #Anzahl der Tage im Jahr, zum gewaehlten Datum
  86. tage = tage + jahrtage #Tage vor dem gewaehlten Jahr und Tage im gewaehlten Jahr werden addiert.
  87. if schaltjahr == "kein Schaltjahr." and monat == 2 and tag == 29: #Ausgabe für 29. Februar in einem Nicht-Schaltjahr
  88. print "Das Jahr", jahr, "ist kein Schaltjahr."
  89. print "Daher gibt es in diesem Jahr keinen 29. Februar"
  90. else: #Ausgabe regulaer
  91. print ""
  92. print "Das Jahr", jahr, "ist", schaltjahr
  93. 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.
  94. print ""
  95. print "Zum Berechnen eines weiteren Datums druecken Sie J. "
  96. nochmal = raw_input("Beenden des Programms mit beliebiger Taste. ")
  97. if nochmal == "j" or nochmal == "J": #ermoeglicht mehrmaliges Durchlaufen der Hauptfunktion
  98. Programm()
  99. Programm()#hier startet das Programm