À partir de la formule de congruence de Zeller, calculez ce qu'est un jour.
calcal.py
#!/usr/bin/python3
import sys
y = int(sys.argv[1])
m = int(sys.argv[2])
d = int(sys.argv[3])
youbia = ["journée", "Mois", "Feu", "eau", "bois", "Argent", "sol"]
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("UN D", y, "Année", m, "Mois", d, "journée", youbia[youbi], "C'est un jour.",sep="")
Exemple de sortie
$ calcal.py 1967 5 12
Le 12 mai 1967 est vendredi.
$ calcal.py 1994 12 25
Le 25 décembre 1994 est dimanche.
$ calcal.py 1995 12 24
Le 24 décembre 1995 est dimanche.
$ calcal.py 1998 12 24
Le 24 décembre 1998 est jeudi.
$ calcal.py 2000 5 12
Le 12 mai 2000 est vendredi.
$ calcal.py 2019 12 25
Le 25 décembre 2019 est le mercredi.
$ calcal.py 10000 5 12
Le 12 mai 10000 après JC est vendredi.
$
À propos, c'est un programme qui produit le calendrier perpétuel.
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)
Exemple de sortie
$ 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 Voici un code qui résume le calcul du jour et le calendrier perpétuel. La fonction de calcul du jour est celle du calcul entier présenté par kkdd. $ ./cal.py y m pour afficher le calendrier de l'année y année m mois. $ ./cal.py y m d affiche le jour de l'année m mois d jour.
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