J'ai tenté d'écrire un programme qui édite un menu permettant des choix.
- Code python : Select all
# Essai de codage d'un menu.
# Largement et librement adapté des écrits de Mss cent20, Bisam et Adriweb.
# Tapez fcal() pour lancer le programme. (fcal() ie fonctions calendaires).
# Le programme retourne, quand c'est judicieux, un simple chiffre en seconde ligne du résultat.
# Il s'agit du jour de la semaine : 0 = dimanche... 6 = samedi.
# Exemple : 19 6 1988 ==> 2447332 et 0, (Le n° du jour julien, et le jour de la semaine afférent, ici 0 soit dimanche).
# Constantes :
TEXTE = ("Fonctions calendaires :")
TEXTE1 = ("Veuillez entrer votre choix : 1, 2, 3, 4 ou 0 => ")
P, I, = print, input
def fcal():
P(TEXTE)
P("1. Date vers JDN")
P("2. JDN vers date")
P("3. JDS, jour de la semaine")
P("4. Menu")
P("0. Sortie du programme")
C = int(input(TEXTE1))
if C==0:
P("Fin")
elif C==1:
P("vous avez opté pour la fonction 1. Date vers JDN : tapez jdn(j,m,a) : => ")
elif C==2:
P("vous avez opté pour la fonction 2. JDN vers date : tapez j2d(jdn) : => ")
elif C==3:
P("vous avez opté pour la fonction 3. Jour de la semaine : tapez jdn(j,m,a) : => ")
elif C==4:
menu()
# Date calendaire d'un JDN donné.
# Validité du 01/01/-4712 au 31/12/9999.
# jdn signifie Julian Day Number en anglais soit : Numéro du jour Julien.
from math import *
def jdn(j,m,a):
if (m)<3:
a-=1; m+=12
jd=(int(365.25*(a+4716) + int(30.6001*(m+1)) + j - 1524))
s=2299160 # dernier jour du calendrier julien
if jd > s: # si oui, ajuster pour le calendrier grégorien
jd = jd + 2 - int(a/100) + int(a/400)
P(jd) # n° du jour julien (julian day number en anglais d'où : jdn)
P((jd+1) % 7)
def j2d(jdn):
z=an=a=b=c=E=0
d=j=m=an=s=0
R=1
if jdn<0 or jdn>5373484:
raise Exception("jdn indéfini car hors limites de validité")
#print("jdn indéfini car hors limites de validité")
z=int(jdn)
a=int((z-1867216.25)/36524.25)
an=z+1+a-int(a/4)
if z<2299161:
an=z
b=an+1524; c=int((b-122.1)/365.25);
d= int(365.25*c); E=int((b-d)/30.6001);
j=b-d-int(30.6001*E)
if E<14:
m=E-1
if E==14 or E==15:
m=E-13
if m<3:
an=c-4715
if m>2:
an=c-4716
if an<0:
R=-1
s=R*(fabs(j)+ fabs(m/100)+ fabs(an/1000000))
s=round(s,7)
P(s)
P((jdn+1) % 7)
Il faut taper fcal(), taper 2 et enfin j2d(1507900), par exemple, pour obtenir -22.05.0584 : 22 mai de l'année -584.
Je me demande si ma démarche est bonne, oui ça marche mais .....
Peut-être une astuce, un raccourci de programmation ? Si vous avez le temps.
Une question : pourquoi y a-t-il une petite étoile rouge quand je poste un message ?
Bonne journée.