# -*- coding: utf-8 -*-
#-----------------------------floor de la bibliothèque math
# from math import sqrt
from math import floor
#-----------------------------choisir l'option
def choisir() :
    global choix
    
    print()    
    print("choisissez le chiffre de l'une des options suivantes")
    print("----------------------------------------------------")
    print("        date du système............= 1")
    print("        date manuelle..............= 2")
    print()
    choix = input("    Entrez le numéro de l'option choisie : ")
    try :
        choix = int(choix)
    except :
        print("Vous devez taper uniquement un chiffre, rien d'autre")
        print()
        choisir() # tourniquet pour chiffre non conforme
    
    if choix < 1 :
        print("     Erreur se chiffre est trop petit !")
        choisir()  # tourniquet pour chiffre trop petit
        
    if choix > 2 :
        print("     Erreur se chiffre est trop grand !")    
        choisir()  # tourniquet pour chiffre trop grand
    
    return
#-----------------------------voir si l'année ext bissextile
def bissextile() :
    global bisxtl
    
    if année % 4 == 0 and année % 100 != 0 or année % 400 == 0 :
        bisxtl = 1
    else :
        bisxtl = 0
    
    return
#-----------------------------date système
def dt_sys() :
    global année
    global mois
    global date
    
    année = datetime.date.today().strftime("%Y")
    année = int(année)
    mois = datetime.date.today().strftime("%m")
    mois = int(mois)
    date = datetime.date.today().strftime("%d")
    date = int(date)
    
    return
#-----------------------------questions année
def question_a() :
    global année
    
    année = input("Éphémérides de quelle année ? ")
    try :
        année = int(année)
    except :
        print()
        print("Vous devez taper uniquement des chiffres, rien d'autre")
        question_a() # tourniquet pour chiffre non conforme
        print()
    
    if année <= 1583 or année > 9999 :
        print()
        print("minimum 1583 maximum 9999")
        question_a() # tourniquet pour chiffre non conforme 
    
    return
#-----------------------------questions mois
def question_m() :
    global mois
    global njr_mois
    
    mois = input("Entrer le chiffre du mois ")
    try :
        mois = int(mois)
    except :
        print()
        print("Vous devez taper uniquement des chiffres, rien d'autre")
        question_m() # tourniquet pour chiffre non conforme
        
    if mois == 1 or mois == 3 or mois == 5 or mois == 7 or mois == 8 or mois == 10 or mois == 12 :
        njr_mois = 31
        
    if mois == 4 or mois == 6 or mois == 9 or mois == 11 :
        njr_mois = 30
        
    if mois == 2 :
        njr_mois = 28 + bisxtl
        
    if mois < 1 or mois > 12 :
        print()
        print("ce mois n'existe pas !")
        question_m() # tourniquet pour chiffre non conforme
    
    return
#-----------------------------questions date
def question_j() :
    global date
    
    date = input("Entrer la date du jour ")
    try :
        date = int(date)
    except :
        print()
        print("Vous devez taper uniquement des chiffres, rien d'autre")
        question_j() # tourniquet pour chiffre non conforme
    
        print()
    if date < 1 :
        print()
        print("Il n'y a pas asser de jours pour le mois numéro ", mois)
        question_j() # tourniquet pour chiffre non conforme
    
    if date > njr_mois :
        print()
        print("Il y a trop de jours pour le mois numéro ", mois)
        question_j() # tourniquet pour chiffre non conforme
    
    return
#-----------------------------voir si l'année ext bissextile
def bissextile() :
    global bisxtl
    
    if année % 4 == 0 and année % 100 != 0 or année % 400 == 0 :
        bisxtl = 1
    else :
        bisxtl = 0
    
    return
#-----------------------------calcul du jour de l'an et de la St Silvestre (premier et dernier jour de l'année)
def jourDeLan() :
    global jr_d_lan
    global jr_d_fin
    global chn_jr_lan
    global chn_jr_der
    
    jr_d_lan = floor((23*1)/(9))+1+4+année+floor((année-1)/(4))-floor((année-1)/(100))+floor((année-1)/(400))
    jr_d_lan = jr_d_lan % 7
    
    if jr_d_lan == 0 :
        chn_jr_lan ="dimanche"
    if jr_d_lan == 1 :
        chn_jr_lan = "lundi"
    if jr_d_lan == 2 :
        chn_jr_lan = "mardi"
    if jr_d_lan == 3 :
        chn_jr_lan = "mercredi"
    if jr_d_lan == 4 :
        chn_jr_lan = "jeudi"
    if jr_d_lan == 5 :
        chn_jr_lan = "vendredi"
    if jr_d_lan == 6 :
        chn_jr_lan = "samedi"
#-----------------------------calcul du dernier jour de l'année
    jr_d_fin = jr_d_lan + bisxtl
    
    if jr_d_fin == 0 :
        chn_jr_der ="dimanche"
    if jr_d_fin == 1 :
        chn_jr_der = "lundi"
    if jr_d_fin == 2 :
        chn_jr_der = "mardi"
    if jr_d_fin == 3 :
        chn_jr_der = "mercredi"
    if jr_d_fin == 4 :
        chn_jr_der = "jeudi"
    if jr_d_fin == 5 :
        chn_jr_der = "vendredi"
    if jr_d_fin == 6 :
        chn_jr_der = "samedi"
        
    return
#-----------------------------longueur des mois
def common() :
    global tpl_mois
    
  # tpl_mois = 31,28,31, 30, 31, 30, 31, 31, 30, 31, 30, 31
    tpl_mois = 31,59,90,120,151,181,212,243,273,304,334,365
#-----------------------------nombre de jour actuel
    global nbr_jr
    #global tpl_mois
    global date
    #global bisxtl
    
    if mois > 1 :
        nbr_jr = (tpl_mois[mois-2]) + date
    else :
        nbr_jr = date
    if mois > 2 :
       nbr_jr = nbr_jr + bisxtl
#-----------------------------ajustement du jour du début
    global jr_debut
    global num_sem
    #global jr_d_lan
    
    jr_debut = 1
    num_sem = 0
    if jr_d_lan == 1 :
        jr_debut = jr_debut + 0
        num_sem = 0
    if jr_d_lan == 2 :
        jr_debut = jr_debut + 6
        num_sem = 1
    if jr_d_lan == 3 :
        jr_debut = jr_debut + 5
        num_sem = 1
    if jr_d_lan == 4 :
        jr_debut = jr_debut + 4
        num_sem = 1
    if jr_d_lan == 5 :
        jr_debut = jr_debut + 3
        num_sem = 0
    if jr_d_lan == 6 :
        jr_debut = jr_debut + 2
        num_sem = 0
    if jr_d_lan == 0 :
        jr_debut = jr_debut + 1
        num_sem = 0
#-----------------------------nombre de semaine
    #global jr_d_lan
    #global bisxtl
    global sem_an
    #global jr_debut
    #global nbr_jr
    
    if jr_d_lan == 3 and bisxtl== 1 :
        sem_an = 53
    if jr_d_lan == 4 :
        sem_an = 53
    while jr_debut <= nbr_jr :
        jr_debut = jr_debut + 7
        num_sem = num_sem + 1
#-----------------------------% dans l'année
    global pct
    global prcent
    
    pct = 365 + bisxtl - nbr_jr
    pct = abs(pct)
    prcent = ((pct*100)/(365))
    prcent = round(100 - prcent,1)
#-----------------------------année à 2 chiffres
    global an_2chif
    global année
    
    an_2chif = ((année) / (100))
#-----------------------------siècle
    #global an_2chif
    global siècle
    
    siècle = int(an_2chif)
    siècle = siècle + 1
#-----------------------------calculs du jour Entrée
    #global mois
    global num_jr

    if mois < 3 :
        num_jr = floor((23*mois)/(9))+date+4+année+floor((année-1)/(4))-floor((année-1)/(100))+floor((année-1)/(400))
    else :
        num_jr = floor((23*mois)/(9))+date+2+année+floor((année)/(4))-floor((année)/(100))+floor((année)/(400))
    num_jr = num_jr % 7
#-----------------------------nom du jour entrée
    #global num_jr
    global chn_jr
    
    if num_jr == 0 :
        chn_jr = "dimanche"
    if num_jr == 1 :
        chn_jr = "lundi"
    if num_jr == 2 :
        chn_jr = "mardi"
    if num_jr == 3 :
        chn_jr = "mercredi"
    if num_jr == 4 :
        chn_jr = "jeudi"
    if num_jr == 5 :
        chn_jr = "vendredi"
    if num_jr == 6 :
        chn_jr = "samedi"
#-----------------------------nom du mois entrée
# Les mois gardent leur numéro pour le calcul
    #global mois
    global chn_mois
    
    if mois == 1 :
        chn_mois = "janvier"
    if mois == 2 :
        chn_mois = "février"
    if mois == 3 :
        chn_mois = "mars"
    if mois == 4 :
        chn_mois = "avril"
    if mois == 5 :
        chn_mois = "mai"
    if mois == 6 :
        chn_mois = "juin"
    if mois == 7 :
        chn_mois = "juillet"
    if mois == 8 :
        chn_mois = "août"
    if mois == 9 :
        chn_mois = "septembre"
    if mois == 10 :
        chn_mois = "octobre"
    if mois == 11 :
        chn_mois = "novembre"
    if mois == 12 :
        chn_mois = "décembre"
    return
#=================================
# Début de la lecture du programme
#-----------------------------déclaration des variables globales
global choix      # choisir la date système ou manuelle
global date       # date  utilisateur
global mois       # mois  utilisateur
global année      # année utilisateur
global jr_d_lan   # premier jour de l'année
global jr_d_fin   # dernier jour de l'année
global chn_jr_lan # chaîne du jour de l'an
global chn_jr_der # chaîne de la St Sylvestre
global jrDernier  # pour la St Sylveste
global bisxtl     # bissextiles
global njr_mois   # nombre de jour dans le mois
global nbr_jr     # nombre de jour parcouru et restant
global jr_debut   # jour du début du calcul
global num_sem    # quantième semaine de l'année
global sem_an     # nombre de semaine dans l'année
global pct        # variable intermédiaire du %
global prcent     # pourcentage
global an_2chif   # année/100 pour avoir l'année à 2 chiffre
global siècle     # pour le siècle
global num_jr     # numéro du jour utilisateur
global chn_jr     # chaîne du nom des jour
global chn_mois   # chaîne du nom des mois
#-----------------------------initialisation des variables
choix = 0
date = 0
mois = 0
année = 0
jr_d_lan = 0
jr_d_fin = 0
chn_jr_lan = ""
chn_jr_der = ""
bisxtl = 0
long_mois = 0
nbr_jr = 0
jr_debut = 0
num_sem = 0
sem_an = 52
pct = 0
prcent = 0
an_2chif = 0
siècle = 0
num_jr = 0
lst_jr = ""
lst_mois = ""
#-----------------------------choisir l'option
def choisir() :
    global choix
    
    print()    
    print("choisissez le chiffre de l'une des options suivantes")
    print("----------------------------------------------------")
    print("        date du système............= 1")
    print("        date manuelle..............= 2")
    print()
    choix = input("    Entrez le numéro de l'option choisie : ")
    try :
        choix = int(choix)
    except :
        print("Vous devez taper uniquement un chiffre, rien d'autre")
        print()
        choisir() # tourniquet pour chiffre non conforme
    
    if choix < 1 :
        print("     Erreur se chiffre est trop petit !")
        choisir()  # tourniquet pour chiffre trop petit
        
    if choix > 2 :
        print("     Erreur se chiffre est trop grand !")    
        choisir()  # tourniquet pour chiffre trop grand
    
    return
#-----------------------------[main]    
print()
print("Les calculs sont limités aux années de 1583 à 9999")
choisir()
print()
if choix == 1 :  # si le choix est : date système
    import datetime
    dt_sys()
else :
    question_a() # si le choix est : date manuelle
    question_m()
    question_j()

bissextile()    
jourDeLan()
common()
#-----------------------------impression
print()
print("                ", siècle, "ième siècle")
print()
print("    Le", date, "/", mois, "/", année, "    ", chn_jr, date, chn_mois, année)
print()
print("             Le jour de l'an tombe")
print("   un", chn_jr_lan, "et la Saint Sylvestre un", chn_jr_der)
print()
print("      Mois numéro", mois, "d'une année de", sem_an, "semaines")
print()
print("    Numéro de semaine", num_sem, "  il en reste encore", sem_an - num_sem)
print()
print("   C'est le jour numéro", nbr_jr, "    ", prcent, "% de l'année")
print()
print("   Il reste encore", 365 + bisxtl - nbr_jr, "jours    ", 100 - prcent,"% de l'année")
print()
if bisxtl == 1 :
    print("           cette année est bissextile")
else :
    print("        cette année n'est pas bissextile")
#-----------------------------------------------------------------------------------Sortie
print()
print("----------------------------------------------------")
bye = (input ("Entrer pour Sortir...!"))
