import sys
|
|
def wochentag(d:int, m:int, y:int) -> int:
|
y0 = y - (14 - m) // 12
|
x = y0 + y0//4 - y0//100 + y0//400
|
m0 = m + 12*( (14-m)//12 ) - 2
|
return (d + x + (31*m0)//12) % 7
|
|
|
def berechne_ueberhang_tage(wochentag:int) -> int:
|
"""Nach Gepflogenheit in deutches Kalender-System fängt eine Woche mit Montag an.
|
|
Mo -> Keinen Überhang;
|
Di -> 1 Überhang;
|
Mi -> 2 Überhange;
|
Do -> 3 Überhange;
|
Fr -> 4 Überhange;
|
Sa -> 5 Überhange;
|
So -> 6 Überhange
|
"""
|
return (wochentag - 1) % 7
|
|
|
def ist_schaltjahr(y:int) -> bool:
|
return (y % 4 == 0) and ( (y%100 != 0) or (y%400 == 0) )
|
|
|
def letzter_tag(m: int, y:int) -> int:
|
tage = [None, 31, 28, 31, 30,
|
31, 30, 31, 31,
|
30, 31, 30, 31]
|
if m != 2: return tage[m]
|
return 29 if ist_schaltjahr(y) else 28
|
|
|
def print_kalender(m: int, y: int):
|
monaten = [None,
|
"Januar", "Februar", "März", "April",
|
"Mai", "Juni", "July", "August",
|
"September", "Oktober", "November", "Dezember"]
|
# Ausgabe des Monat und Jahr
|
print(f"{monaten[m]} {y}")
|
wochentage = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]
|
print(" ".join(wochentage))
|
|
# Ausgabe der Überhang von letzen Monat
|
erster_wochentag = wochentag(1, m, y)
|
ueberhang = berechne_ueberhang_tage(erster_wochentag)
|
spalten_breite = len(wochentage[0]) + 1
|
ueberhang_zeichen = " "*(spalten_breite * ueberhang)
|
print(ueberhang_zeichen, end="")
|
|
# Ausgabe des Kalenders
|
spalten_idx = ueberhang
|
tag = 1
|
letzter_tag_im_monat = letzter_tag(m, y)
|
while tag <= letzter_tag_im_monat:
|
print(f"{tag:2d}", end=" ")
|
tag += 1
|
spalten_idx += 1
|
if spalten_idx % 7 == 0: print()
|
|
|
m, y = int(sys.argv[1]), int(sys.argv[2])
|
print_kalender(m, y)
|
|
print()
|