Schaltjahr1.py 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. # Schaltjahre
  2. # Autoren: Gunnar, Jan
  3. # Python 2.7.15
  4. # 2.2.19
  5. #noch zu erledigen: Eingabefehler abfangen in Funktion packen, um Falscheingabe im x-ten Versuch abzufangen.
  6. import math as m
  7. monate = ["Januar", "Februar", "Maerz", "April", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
  8. einunddreissigtage = [1, 3, 5, 7, 8, 10, 12]
  9. dreissigtage = [4, 6, 9, 11]
  10. def Programm():
  11. print ""
  12. print "Bitte geben Sie ein Datum ein."
  13. print ""
  14. while True:
  15. try:
  16. jahr = raw_input("Jahr: ")
  17. jahr = int(jahr)
  18. break
  19. except ValueError:
  20. print "Bitte natuerliche Zahl eingeben!"
  21. while True:
  22. try:
  23. monat = raw_input("Monat: ")
  24. monat = int(monat)
  25. break
  26. except ValueError:
  27. print "Bitte natuerliche Zahl eingeben!"
  28. if monat > 12:
  29. print "Fuer den Monat bitte Zahl zwischen 1 und 12 eingeben!"
  30. monat = input("Monat: ")
  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. if tag > 31:
  39. print "Fuer den Tag bitte Zahl zwischen 1 und 31 eingeben!"
  40. tag = input("Tag: ")
  41. if monat in einunddreissigtage and tag > 31:
  42. print "Der", monate[monat - 1], "hat nur 31 Tage!"
  43. tag = input("Tag: ")
  44. elif monat in dreissigtage and tag > 3:
  45. print "Der", monate[monat - 1], "hat nur 30 Tage!"
  46. tag = input("Tag: ")
  47. elif monat == 2 and tag > 29:
  48. print "Der Februar hat maximal 29 Tage!"
  49. tag = input("Tag: ")
  50. tagemonate = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334] #Anzahl der Tage im Jahr, zu Beginn eines jeden Monats
  51. monatetage = tagemonate[monat - 1] #Anzahl der Tage im Jahr, zu Beginn des gewaehlten Monats
  52. jahrtage = monatetage + tag #Anzahl der Tage im Jahr, zum gewaehlten Datum
  53. wochentage = ["Montag.", "Dienstag.", "Mittwoch.", "Donnerstag.", "Freitag.", "Samstag.", "Sonntag."]
  54. schaltjahr = "kein Schaltjahr." #Kein Jahr ist ein Schaltjahr,
  55. if jahr % 4 == 0: #ausser es ist durch 4 teilbar,
  56. schaltjahr = "ein Schaltjahr."
  57. if jahr % 100 == 0: #es sei denn, es ist auch durch 100 teilbar,
  58. schaltjahr = "kein Schaltjahr."
  59. if jahr % 400 == 0: #aber trotzdem, wenn es auch durch 400 teilbar ist.
  60. schaltjahr = "ein Schaltjahr."
  61. tage = (jahr - 1)* 365 #Anzahl Tage gesamt, zu Beginn des gewaehlten Jahrs
  62. if jahr >= 4: #Alle 4 Jahre
  63. tage = tage + m.floor(jahr / 4) #wird 1 Tag addiert.
  64. if jahr >= 100: #Alle 100 Jahre
  65. tage = tage - m.floor(jahr / 100) #wird ein Tag abgezogen.
  66. if jahr >= 400: #Alle 400 Jahre
  67. tage = tage + m.floor(jahr / 400) #wird ein Tag addiert.
  68. if monat < 3 and schaltjahr == "Schaltjahr.": #Liegt das gewaehlte Datum in einem Schaltjahr und im Januar oder Februar,
  69. tage = tage - 1 #wird ein Tag abgezogen.
  70. tage = tage + jahrtage #Tage vor dem gewaehlten Jahr und Tage im gewaehlten Jahr werden addiert.
  71. if schaltjahr == "kein Schaltjahr." and monat == 2 and tag == 29:
  72. print "Das Jahr", jahr, "ist kein Schaltjahr."
  73. print "Daher gibt es in diesem Jahr keinen 29. Februar"
  74. else:
  75. print ""
  76. print "Das Jahr", jahr, "ist", schaltjahr
  77. 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.
  78. print ""
  79. print "Zum Berechnen eines weiteren Datums druecken Sie J. "
  80. nochmal = raw_input("Beenden des Programms mit beliebiger Taste. ")
  81. if nochmal == "j" or nochmal == "J":
  82. Programm()
  83. Programm()