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()