Berechnen Sie aus Zellers Kongruenzformel, welcher Tag ein Tag ist.
calcal.py
#!/usr/bin/python3
import sys
y = int(sys.argv[1])
m = int(sys.argv[2])
d = int(sys.argv[3])
youbia = ["Tag", "Mond", "Feuer", "Wasser", "Holz", "Geld", "Boden"]
if (m == 1 or m == 2):
md = m+10
yd = y-1
else:
md = m-2
yd = y
a = yd // 100
b = yd % 100
youbi = (int(2.6*md - 0.2) + d + b + b//4 + a//4 - 2*a)%7
print("ANZEIGE", y, "Jahr", m, "Mond", d, "Tag", youbia[youbi], "Es ist ein Tag.",sep="")
Ausgabebeispiel
$ calcal.py 1967 5 12
Der 12. Mai 1967 ist Freitag.
$ calcal.py 1994 12 25
Der 25. Dezember 1994 ist Sonntag.
$ calcal.py 1995 12 24
Der 24. Dezember 1995 ist Sonntag.
$ calcal.py 1998 12 24
Der 24. Dezember 1998 ist Donnerstag.
$ calcal.py 2000 5 12
Der 12. Mai 2000 ist Freitag.
$ calcal.py 2019 12 25
Der 25. Dezember 2019 ist Mittwoch.
$ calcal.py 10000 5 12
Der 12. Mai 10000 n. Chr. Ist Freitag.
$
Übrigens ist es ein Programm, das den ewigen Kalender ausgibt.
cal.py
#!/usr/bin/python3
import sys
argvs = sys.argv
argc = len( argvs )
months=[31,28,31,30,31,30,31,31,30,31,30,31]
youbia = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
def weekofday(y,m,d):
md, yd = (m-2, y) if m > 2 else (m+10, y-1)
a, b = divmod(yd, 100)
return ( (int(2.6*md - 0.2) + d + b + b//4 + a//4 - 2*a)%7)
def printcal(y,m):
mm=months[m-1]+(1 if (m==2 and y%4==0 and y%400!=0) else 0)
print(y,m,sep='/')
print (*youbia,sep=' ')
f=weekofday(y,m,1)
print(" "*f,end='')
for i in range(1,mm+1):
print(" %2d " %i,end='')
if f==6:
print("")
f=(f+1)%7
if f!=0:
print("")
if argc==3:
y = int(sys.argv[1])
m = int(sys.argv[2])
else:
print("Usage : cal.py y m")
exit(1)
printcal(y,m)
Ausgabebeispiel
$ cal.py 2020 2
2020/2
Sun Mon Tue Wed Thu Fri Sat
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
$
cal.py version 2.0 Hier ist ein Code, der die Tagesberechnung und den ewigen Kalender zusammenfasst. Die Tagesberechnungsfunktion ist die der von kkdd dargestellten Ganzzahlberechnung. $ ./cal.py y m, um den Kalender für Jahr y Jahr m Monat anzuzeigen. $ ./cal.py y m d zeigt den Tag des Jahres m Monat d Tag an.
cal.py
#!/usr/bin/python3
import sys
argvs = sys.argv
argc = len( argvs )
months=[31,28,31,30,31,30,31,31,30,31,30,31]
youbia = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]
def dayofweek(year, month, day):
m = (month-3)%12
y = year if month >= 3 else year - 1
n = day + (13*m+2)//5 + y + y//4 - (y//100) + y//400 + 2
return (n%7)
def printcal(y,m):
mm=months[m-1]+(1 if (m==2 and y%4==0 and y%400!=0) else 0)
print(y,m,sep='/')
print (*youbia,sep=' ')
f=dayofweek(y,m,1)
print(" "*f,end='')
for i in range(1,mm+1):
print(" %2d " %i,end='')
if f==6:
print("")
f=(f+1)%7
if f!=0:
print("")
if argc==3:
y = int(sys.argv[1])
m = int(sys.argv[2])
printcal(y,m)
elif argc==4:
y = int(sys.argv[1])
m = int(sys.argv[2])
d = int(sys.argv[3])
f = dayofweek(y,m,d)
print(y, "/", m, "/", d, " is ", youbia[f],sep="")
else:
print("Usage : cal.py y m [d]")
exit(1)
Recommended Posts