Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#26 05-03-2014 19:02:06

Dico
Membre
Inscription : 12-12-2009
Messages : 120

Re : [Python] Programme calendrier perpétuel

waou! génial! c'est marrant! je me suis marré!
J'ai vraiment joué avec ton programme, Yoshi. Je dois donc donner un compte rendu.

Il donne les mêmes dates qu'au post #14.
Il est assez poli et ne se plein jamais.

Peut-on gérer toutes les erreurs de saisie de l'utilisateur?

Bon après-midi!


Bon après-midi!

Hors ligne

#27 05-03-2014 19:25:35

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Re,

Toutes les erreurs ?
Je me suis placé dans la peau de l'emmerdeur qui chercherait à bloquer le programme : je crois (à 99%) avoir pensé à tout...
Mais l'imagination de certains est sans limite...
Donc 99% seulement... sait-on jamais ?
Tiens, je ne crois pas avoir pensé à des jours négatifs : il faut que je vérifie !

Sur le plan programmation, j'ai une grosse satisfaction :
J'ai écrit en Basic Amstrad, il y a 30 ans un programme de conjugaison française, sans lexique de verbes, qui à partir d'un verbe donné (ou supposé tel : il pouvait conjuguer escalier qui n'est pas un verbe) pouvait donner les 20 temps de la conjugaison française. Il pouvait  conjuguer à la voix active, à la forme pronominale et à la vois passive, et tu pouvais conjuguer toi et dans ce cas 3 niveaux de difficulté étaient proposés étaient prévus, il y avait 20 messages d'erreur différents, et la règle de conjugaison s'affichait au 1er, 2e ou 3e essai selon le niveau choisi...
Et dans ce cas, un requin se tenait à 6 erreurs derrière un poisson, dont le but était d'entrer dans la grotte à  6 bonnes réponses devant lui, dont l'ouverture était trop étroite pour le requin.
Si on réussissait, se faisait entendre les premières mesures de la truite Schubert...
Mais, ce dont j'étais le plus content, : le programme déterminait de lui-même le groupe du verbe et notamment des verbes en finissant en "ir" qui sont soit du 2e, soit du 3e groupe.
Le Bescherelle aussi, sauf que lui a un lexique de, je ne sais plus, 10000 ou 12000 verbes...*
Mon programme aucun !
Et ce choix pour les verbes en ir se faisait en une dizaine de lignes : j'avais mis plusieurs mois pour trouver l'astuce...

Je l'ai récrit ensuite en TurboBasic et je réfléchis à sa transcription en Python via une interface graphique....

@+


Arx Tarpeia Capitoli proxima...

En ligne

#28 05-03-2014 19:58:47

Dico
Membre
Inscription : 12-12-2009
Messages : 120

Re : [Python] Programme calendrier perpétuel

Yoshi, je ne pense pas avoir le temps à présent pour Basic, TurboBasic, interface graphique,...

Ton programme version "Dico", pour la date erronée 10/101582
donne la réponse: Samedi 10 octobre 582.

Bon après-midi!


Bon après-midi!

Hors ligne

#29 05-03-2014 20:29:03

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Salut,

Erreur de programmation : faute de logique...
Ligne 56 :
if not (Date[2] == "/" or Date[5]=="/"):
Remplacer le or par and...

C'est suffisant.

Merci

@+


Arx Tarpeia Capitoli proxima...

En ligne

#30 05-03-2014 20:41:11

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Salut,

J'avais pensé à ce cas...
Mais, erreur de programmation : faute de logique...
Ligne 56 :
if not (Date[2] == "/" or Date[5]=="/"):
Remplacer le or par and...

C'est suffisant.
Merci

Eh, Dico, je ne t'ai pas incité à programmer ni en Basic Amstrad, ni en TurboBasic : je t'ai simplement expliqué ce que j'avais fait il y a longtemps et que je pensais depuis un certain temps à le récrire en Python et ajouter à Python une interface graphique : il y en a une contenue par défaut avec Python.
Je voulais te signaler ce que je considère que personne n'a jamais fait : permettre à un programme de conjugaison, sans apport d'un lexique, de déterminer de lui-même si un verbe en ir est du 2e ou 3e groupe, en une dizaine de lignes.

D'ailleurs dans le domaine des carrés magiques, j'ai aussi programmé quelque chose dont je pense que personne ne l'a encore fait...
La programmation demande du temps, beaucoup de temps, de patience, d'intuition et de ... persévérance en ce qui concerne les carrés magiques, l'idée m'était venue en 1 h, pour la conjugaison, plusieurs mois (mais à l'époque, j'avais aussi des classes, des copies à corriger, des exos à choisir, des leçons à penser...)

@+


Arx Tarpeia Capitoli proxima...

En ligne

#31 03-12-2014 15:09:50

Illatrym
Invité

Re : [Python] Programme calendrier perpétuel

Bonjour à tous,
en cherchant des exemples de calendriers perpétuel en python je suis tombé il ya une semaine sur cette page, et en m'inspirant de vos exemples et programmes j'ai fait celui-ci (il est en deux partie):

1er partie "calendrier_perpetuel" (à éxécuter):

from fonction_calendrier import date, bissextile

print("Ce programme permet de déterminer le jour de la semaine d'une date (à partir du 01/01/0001)")

c1 = True
while(c1):
    c2 = True
    while(c2):
        date_saisi = input("Saisissez la date (format jj/mm/aaaa): ")
        msg_err = "La date saisi n'est pas valide"
        try:
            if "/" in date_saisi:
                if not (date_saisi[2] == "/" and date_saisi[5] == "/"):
                    print(msg_err, "(les / sont au mauvais endroit ou manquants)")
                    continue
            else:
                continue
        except IndexError:
            continue
        try:
            jour, mois, annee = int(date_saisi[:2]), int(date_saisi[3:5]), int(date_saisi[6:])
        except ValueError:
            print(msg_err)
            continue
        if mois<1 or mois>12:
            print(msg_err, "(mois incorrect)")
            continue
        if annee==0:
            print(msg_err, "(l'an 0 n'existe pas)")
            continue
        elif annee<0:
            print(msg_err, "(année négative)")
        if annee==1583 and mois==10 and jour>5 and jour<15:
            print(msg_err, "(les jours du 5 au 14 octobre 1583 (inclus) n'existe pas)")
            continue
        if jour<=0:
            print(msg_err, "(jour nul ou négatif)")
            continue
        elif jour>30 and mois in [4, 6, 9, 11]:
            print(msg_err, "(ce mois n'a que 30 jours)")
            continue
        elif jour>31 and mois in [1, 3, 5, 7, 8, 10, 12]:
            print(msg_err, "(un mois n'a que 31 jours maximum)")
            continue
        elif jour==29 and mois==2 and not bissextile(annee):
            print(msg_err, "(année non bissextile: pas de 29 février)")
            continue
        elif jour>29 and mois==2 and bissextile(annee):
            print(msg_err, "(année bissextile: le mois de février n'a que 29 jours)")
            continue
        c2 = False

    texte = date(jour, mois, annee)
    print("\t{}".format(texte))

    c3 = True
    while(c3):
        reponse=input("Voulez-vous déterminer le jour de la semaine d'une autre date? (O/N) ").lower()
        if reponse=="n":
            c3 = False
            c1 = False
        elif reponse=="o":
            c3 = False
            c1 = True

2e partie "fonction_calendrier":

import datetime

liste_mois = ['janvier','février','mars','avril','mai','juin','juillet',
              'août','septembre','octobre','novembre','décembre']
liste_nb_jour = [0, 31, 59, 90, 120, 151, 181, 212, 145, 273, 304, 334]

def bissextile_gregorien(annee):
    bissextile = False
    if annee % 400 == 0 or (annee % 4 == 0 and not annee % 100 == 0):
        bissextile = True
    return bissextile

def bissextile_julien(annee):
    bissextile = False
    if annee % 4 == 0:
        bissextile = True
    if annee in [4, 8]:
        bissextile = False
    return bissextile

def bissextile(annee):
    bissextile = False
    if annee>1583:
        bissextile = bissextile_gregorien(annee)
    elif annee<=1583 and annee>=12:
        bissextile = bissextile_julien(annee)
    elif annee>12:
        bissextile = False
    return bissextile

def nb_jour(jour, mois, annee):
    somme = 0
    i=1
    if annee<1583 or (annee==1583 and mois<10) or (annee==1583 and mois==10 and jour<5):
        while(i<annee):
            if bissextile_julien(i):
                somme += 366
            else:
                somme += 365
            i+=1
    elif annee>1583 or (annee==1583 and mois>10) or (annee==1583 and mois==10 and jour>14):
        while(i<annee):
            if bissextile_gregorien(i):
                somme += 366
            else:
                somme += 365
            i+=1
    return somme

def reste(jour, mois, annee):
    if not bissextile(annee):
        i=0
        while(i<12):
            if mois == i+1:
                rest = liste_nb_jour[ i] + jour - 1
            i+=1
    else:
        i=0
        while(i<12):
            if mois == i+1:
                if i>=2:
                    rest = liste_nb_jour[ i] + jour
                else:
                    rest = liste_nb_jour[ i] + jour - 1
            i+=1
    return rest

def date(jour, mois, annee):

    s = nb_jour(jour, mois, annee) + reste(jour, mois, annee)
    if s % 7 == 0:
        j_semaine = "Lundi"
    elif s % 7 == 1:
        j_semaine = "Mardi"
    elif s % 7 == 2:
        j_semaine = "Mercredi"
    elif s % 7 == 3:
        j_semaine = "Jeudi"
    elif s % 7 == 4:
        j_semaine = "Vendredi"
    elif s % 7 == 5:
        j_semaine = "Samedi"
    elif s % 7 == 6:
        j_semaine = "Dimanche"

    texte = "{0}, {1} {2} {3}".format(j_semaine, jour, liste_mois[mois-1], annee)
    return texte

annee, mois, jour = str(datetime.date.today()).split("-")
texte = date(int(jour), int(mois), int(annee))
print("Aujourd'hui nous sommes le {}".format(texte))

Merci de faire des commentaires pour que je puisse améliorer mon programme

#32 10-12-2014 13:54:16

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Bonjour,

Je suis un peu chargé en ce moment et je n'ai pas eu le temps de regarder ton prog en détail...
Une remarque rapide :

if s % 7 == 0:
    j_semaine = "Lundi"
elif s % 7 == 1:
    j_semaine = "Mardi"
elif s % 7 == 2:
    j_semaine = "Mercredi"
elif s % 7 == 3:
    j_semaine = "Jeudi"
elif s % 7 == 4:
    j_semaine = "Vendredi"
elif s % 7 == 5:
    j_semaine = "Samedi"
elif s % 7 == 6:
    j_semaine = "Dimanche"

S'il y avait 30 cas, tu étudierais chacun des 30 cas comme ça ?
Je te suggère de créer une liste J_semaine (en Python, J_semaine et j_semaine sont deux noms différents) :
J_semaine=["Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"]
et d'y accéder ainsi :

J_semaine=["Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"]
j_semaine=J_semaine[s%7]

Je verrai le fonctionnement global un peu plus tard.
Un conseil : sélectionne ton code et clique sur la balise code <> dans la barre d'outils des messages et remplace dans la balise ouvrante code, le mot code par code=Python ...

@+


Arx Tarpeia Capitoli proxima...

En ligne

#33 27-01-2021 16:32:32

Filipe
Invité

Re : [Python] Programme calendrier perpétuel

Bonsoir quelqu'un pourrait me faire un programme sur edupython s'il vous plait je n'arrive pas voici mon exercice

# Ecrivez un programme capable d'afficher la liste de tous les jours de l'année imaginiare, laquelle
# commencerais un jeudi. Votre script utilisera lui-même trois listes : une liste des noms de jours de la semaine,
# une liste des noms des mois, et une liste des nombres de jours que comportent chacun des mois (ne pas tenir compte des années bissextiles).
# Exemple de sortie : jeudi 1 janvier   vendredi 2 janvier  samedi 3 janvier    dimanche 4 janvier  ... et ainsi de suite, jusqu'au 31 décembre.

#34 27-01-2021 18:37:26

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Bonsoir,

Puis-je voir tes 3 listes ?
Qu'as-tu déjà fait ?
A quoi as-tu pensé ?
Quelles difficultés rencontres-tu ?

@+


Arx Tarpeia Capitoli proxima...

En ligne

#35 27-01-2021 19:38:58

Filipe
Invité

Re : [Python] Programme calendrier perpétuel

Voila mes trois liste:
mois = [[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Décembre']]
jour = ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi']
je n'arrive pas a faire apparaitre par exemple sa jeudi 1 janvier   vendredi 2 janvier  samedi 3 janvier    dimanche 4 janvier  ... et ainsi de suite, jusqu'au 31 décembre.
etc..

#36 27-01-2021 20:07:52

Filipe
Invité

Re : [Python] Programme calendrier perpétuel

yoshi a écrit :

Bonsoir,

Puis-je voir tes 3 listes ?
Qu'as-tu déjà fait ?
A quoi as-tu pensé ?
Quelles difficultés rencontres-tu ?

@+

Voila mes trois liste:
mois = [[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Décembre']]
jour = ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi']
je n'arrive pas a faire apparaitre par exemple sa jeudi 1 janvier   vendredi 2 janvier  samedi 3 janvier    dimanche 4 janvier  ... et ainsi de suite, jusqu'au 31 décembre.
etc..
@[/yoshi]

#37 27-01-2021 20:22:44

Filipe
Invité

Re : [Python] Programme calendrier perpétuel

@yoshi
je ne sais pas si je devait mettre les parentheses desolé

#38 27-01-2021 22:40:31

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Bonsoir,

Rapidement, la suite à demain.
J'ai moi, écrit :
Noms_mois =["janvier", "février", "mars", "avril", "mai","juin","juillet", "août", "septembre","octobre","novembre", "décembre"]
Nb_Jours_mois=[31,28,31,30,31,30,31,31,30,31,30,31]

Noms_jours=["jeudi", "vendredi", "samedi", "dimanche", "lundi", "mardi", "mercredi"]
Rien dans ton énoncé n'interdit d'écrire les jours du jeudi au mercredi : ça simplifie la programmation...


J'ai d'abord une boucle sur les mois
for i in range(12):
    nb_jours=Nb_Jours_mois[ i]
et à la suite j'écris une deuxième boucle  avec le nb_jours...:
    for j in range(nb_jours):

Peux-tu afficher avec ces boucles le n° du jour suivi du nom du mois ? e n° du jour du mois : attention que range(n) en Python va de 0 à n-1 !
Il te faut arriver à afficher ensuite
- le nom du jour de la semaine. 2 soucis :
  * tous les 7 jours, on revient au point de départ,
  * Si un mois se termine le nom n° j, le mois suivant commencera par le nom n° j+1

Réfléchis à ces points...

@+


Arx Tarpeia Capitoli proxima...

En ligne

#39 27-01-2021 23:01:48

Filipe
Invité

Re : [Python] Programme calendrier perpétuel

Bonsoir,

Rapidement, la suite à demain.
J'ai moi, écrit :
Noms_mois =["janvier", "février", "mars", "avril", "mai","juin","juillet", "août", "septembre","octobre","novembre", "décembre"]
Nb_Jours_mois=[31,28,31,30,31,30,31,31,30,31,30,31]

Noms_jours=["jeudi", "vendredi", "samedi", "dimanche", "lundi", "mardi", "mercredi"]
Rien dans ton énoncé n'interdit d'écrire les jours du jeudi au mercredi : ça simplifie la programmation...


J'ai d'abord une boucle sur les mois
for i in range(12):
    nb_jours=Nb_Jours_mois[ i]
et à la suite j'écris une deuxième boucle  avec le nb_jours...:
    for j in range(nb_jours):

Peux-tu afficher avec ces boucles le n° du jour suivi du nom du mois ? e n° du jour du mois : attention que range(n) en Python va de 0 à n-1 !
Il te faut arriver à afficher ensuite
- le nom du jour de la semaine. 2 soucis :
  * tous les 7 jours, on revient au point de départ,
  * Si un mois se termine le nom n° j, le mois suivant commencera par le nom n° j+1

Réfléchis à ces points...

@yoshi je vais essayer demain mais je ne suis vraiment pas bon dans les programme c la première fois que j’utilise edupython je dois rendre ce travail avant demain soir , Donc j’essayerai demain et je te recontacterai ici Merci .

#40 27-01-2021 23:54:31

Filipe
Invité

Re : [Python] Programme calendrier perpétuel

re bonsoir je n’arrive vraiment pas à faire le programme je ne suis pas douée j’aimerai vraiment que quelqu’un le fasse à ma place si quelqu’un pourrait le faire se serait cool Merci ?

#41 28-01-2021 08:44:33

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Bonjour,

j'ai changé d'avis...
C'est tout aussi simple d'écrire :
Noms_jours=[ "lundi", "mardi", "mercredi","jeudi", "vendredi", "samedi", "dimanche"]

j’aimerai vraiment que quelqu’un le fasse à ma place si quelqu’un pourrait le faire se serait cool Merci ?

Tu t'es trompée d'adresse ...
Nos Règles de fonctionnement disent :

*Notre but étant de vous aider à résoudre vos difficultés, et non de faire les exercices à votre place, ne postez pas le sujet d'un exercice sans montrer que vous y avez travaillé : il n'y serait probablement pas répondu. A vous d'expliquer ce que vous avez déjà fait, là où vous bloquez, et pourquoi...

Donc, non, personne ne va faire le travail à ta place...
N'insiste pas là-dessus !

Un petit effort ? EduPython c'est une plateforme qui propose Python dans les Lycées...
Ton problème n'est pas Python, mais mathématique !
Es-tu déjà capable d'afficher
1er janvier
2 janvier
...
18 février
...
23 mars... etc
Je t'ai donné de quoi le faire !
Après le nom du jour, c'est juste une astuce  mathématique...

A rendre vendredi soir ???
Ça c'est de la prévoyance ....

@+


Arx Tarpeia Capitoli proxima...

En ligne

#42 28-01-2021 10:00:21

Filipe
Invité

Re : [Python] Programme calendrier perpétuel

Ok d’accord mais j’essaye de le faire depuis lundi je vais encore essayer ce soir merci de ton aide

#43 28-01-2021 10:07:06

Filipe
Invité

Re : [Python] Programme calendrier perpétuel

Et oui j’ai réussi à mettre 12 janvier 1 janvier etc . Merci
Manque plus qu’un programme pour le jour

#44 28-01-2021 10:14:50

Filipe
Invité

Re : [Python] Programme calendrier perpétuel

@yoshi C bon j’ai réussi enfaite merci de ton aide

#45 28-01-2021 16:49:33

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Re,

J'ose espérer que c'est vrai et que tu n'as pas trouvé quelqu'un pour le faire à ta place...
Parce que la prochaine fois, tu te retrouverais devant la même problématique, sans avoir avancé d'un pouce.
Demain seulement,  je mettrai en ligne mes deux solutions, peut-être même une 3e plus évoluée à laquelle je vais de ce pas réfléchir.

@+


Arx Tarpeia Capitoli proxima...

En ligne

#46 29-01-2021 15:17:54

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Bonjour,

Ma première idée, commencer la semaine à jeudi, l'énoncé ne l'interdisant pas :

# usr/bin/env python
# -*- coding: utf-8 -*-

Noms_mois =["janvier", "février", "mars", "avril", "mai","juin","juillet", "août", "septembre","octobre","novembre", "décembre"]
Nb_Jours_mois=[31,28,31,30,31,30,31,31,30,31,30,31]
Noms_jours=["jeudi", "vendredi", "samedi", "dimanche", "lundi", "mardi", "mercredi"]

correction=0
for i in range(12):
    nb_jours=Nb_Jours_mois[i]
    for j in range(nb_jours):
        no_jour=(j+correction)%7
        print (Noms_jours[no_jour],j+1,Noms_mois[i])
    correction=no_jour+1
    print()
 

Puis, je me suis dit que ce n'était pas crédible, la demoiselle en détresse n'aurait pas eu cette idée.

Donc deuxième code :

# usr/bin/env python
# -*- coding: utf-8 -*-

Noms_mois =["janvier", "février", "mars", "avril", "mai","juin","juillet", "août", "septembre", "octobre","novembre", "décembre"]
Nb_Jours_mois=[31,28,31,30,31,30,31,31,30,31,30,31]
Noms_jours=["lundi", "mardi", "mercredi","jeudi", "vendredi", "samedi", "dimanche" ]

no_jour_fin_mois=3
for i in range(12):
    nb_jours=Nb_Jours_mois[i]
    for j in range(nb_jours):
        no_jour=(j+no_jour_fin_mois)%7
        print (Noms_jours[no_jour],j+1,Noms_mois[i])
    no_jour_fin_mois=no_jour+1
    print()
 

Je recherche une astuce pour me passer du n° du dernier jour restant...

@+


Arx Tarpeia Capitoli proxima...

En ligne

#47 01-02-2021 21:14:22

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Bonsoir,

J'ai trouvé du temps à y consacrer et je l'ai fait :

# usr/bin/env python
# -*- coding: utf-8 -*-

Mois =[("janvier",3),("février",34),("mars",62),("avril",93),("mai",123),("juin",154),("juillet",184),("août",215),("septembre",246),("octobre",276),("novembre",307),("décembre",337)]
Nb_Jours_mois=[31,28,31,30,31,30,31,31,30,31,30,31]
Noms_jours=["lundi", "mardi", "mercredi","jeudi", "vendredi", "samedi", "dimanche" ]


for i,(mois, total) in enumerate(Mois):
    nb_jours=Nb_Jours_mois[i]
    for j in range(nb_jours):
        print (Noms_jours[(total+j)%7].ljust(8),"%2i" %(j+1),mois)
    print()
 

J'ai soigné l'affichage :

mardi     8 décembre
mercredi  9 décembre
jeudi    10 décembre
vendredi 11 décembre
samedi   12 décembre
dimanche 13 décembre
lundi    14 décembre

@+


Arx Tarpeia Capitoli proxima...

En ligne

#48 17-02-2021 12:50:48

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Bonjour,

Avoir écrit "J'ai soigné l'affichage" m'a donné à réfléchir...
Je me suis mis en tête d'afficher un mois donné d'une année donnée sous cette forme :


      Septembre 2021

Lu  Ma  Me  Je  Ve  Sa  Di
         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  30


       Février 2020

Lu  Ma  Me  Je  Ve  Sa  Di
                     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

Je commence par construire le calendrier complet de l'année choisie
Cela fait j'affiche les jours et nos selon mon choix prédéterminé...
Seule concession aux modules intégrés de Python : je cherche, via le module datetime de Python, à quel jour de la semaine correspond le 1er janvier de l'année voulue.
Tout le reste est du fait-main sur la base de l'exercice soumis.
Je gère les années bissextiles.

# usr/bin/env python
# -*- coding: utf-8 -*-

from datetime import datetime

###################
an = 2020        
Mois_attendu=2    
###################

Mois_attendu-=1
bis=(an%4==0 and an%100!=0) or an%400==0
calendrier,Mois=[],[]
Noms_mois =["janvier", "février", "mars", "avril", "mai","juin","juillet", "août", "septembre",\
            "octobre","novembre", "décembre"]
Nb_Jours_mois=[31,28+bis,31,30,31,30,31,31,30,31,30,31]
Noms_jours=["lundi", "mardi", "mercredi","jeudi", "vendredi", "samedi", "dimanche" ]

#Construction du calendrier de l'année
no_jour_fin_mois=datetime(an,1,1).isoweekday()-1
for i in range(12):
    nb_jours=Nb_Jours_mois[i]
    for j in range(nb_jours):
        no_jour=(j+no_jour_fin_mois)%7
        Mois.append([Noms_jours[no_jour],j+1,Noms_mois[i]])
    calendrier.append(Mois)
    no_jour_fin_mois,Mois=no_jour+1,[]

#Affichage du mois choisi
M_A=Noms_mois[Mois_attendu][0].capitalize()
lg=(21-len(M_A))//2
print (" "*lg+M_A,an)
print ()
print ("Lu  Ma  Me  Je  Ve  Sa  Di")
no_jr=Noms_jours.index(calendrier[Mois_attendu][0][0])
for i,liste in enumerate(calendrier[Mois_attendu]):
    if i==0:
        print (" "*4*no_jr+str("%2i" %(i+1)),end="  ")
    else:
        if (i+no_jr)%7==0:
            print()
        print ("%2i" %(i+1),end="  ")

@+


Arx Tarpeia Capitoli proxima...

En ligne

#49 18-02-2021 18:28:28

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Re,

Version plus courte tenant compte de la non-gestion du jour de fin de mois

# usr/bin/env python
# -*- coding: utf-8 -*-

from datetime import datetime

######14      
Mois_attendu=7  
###################

Mois_attendu-=1
b=(an%4==0 and an%100!=0) or an%400==0 #= 1 ou 0 selon bissextile ou pas
ja=datetime(an,1,1).isoweekday()-1     # n° du jour de l'an
cr=ja+b                                 #correctif
Cumul=[ja,31+ja,59+cr,90+cr,120+cr,151+cr,181+cr,212+cr,243+cr,273+cr,304+cr,334+cr]
Nb_Jours_mois=[31,28+b,31,30,31,30,31,31,30,31,30,31]
Noms_mois =["janvier", "février", "mars", "avril", "mai","juin","juillet", "août", "septembre",\
            "octobre","novembre", "décembre"]
Noms_jours=["lundi","mardi", "mercredi","jeudi", "vendredi", "samedi", "dimanche" ]


#Construction du calendrier de l'année
calendrier=[]
for i in range(12):
    nb_jours,total,Mois=Nb_Jours_mois[i],Cumul[i],[]
    for j in range(nb_jours):
        Mois.append([Noms_jours[(total+j)%7],j+1,Noms_mois[i]])
    calendrier.append(Mois)

#Affichage du mois choisi
M_A=Noms_mois[Mois_attendu].capitalize()
lg=(21-len(M_A))//2
print (" "*lg+M_A,an)
print ()
print ("Lu  Ma  Me  Je  Ve  Sa  Di")
no_jr=Noms_jours.index(calendrier[Mois_attendu][0][0])
for i,liste in enumerate(calendrier[Mois_attendu]):
    if i==0:
        print (" "*4*no_jr+str("%2i" %(i+1)),end="  ")
    else:
        if (i+no_jr)%7==0:
            print()
        print ("%2i" %(i+1),end="  ")

Quelques sorties :



        Mars 2021

Lu  Ma  Me  Je  Ve  Sa  Di
 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  30  31  

        Juillet 2021

Lu  Ma  Me  Je  Ve  Sa  Di
             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  30  31      
 
        Août 2021

Lu  Ma  Me  Je  Ve  Sa  Di
                         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  
30  31

@+


Arx Tarpeia Capitoli proxima...

En ligne

#50 14-04-2021 10:51:32

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 16 943

Re : [Python] Programme calendrier perpétuel

Bonjour,

Ce fil avait dévié de son objet premier.
J'ai donc ouvert une nouvelle discussion ici Calendrier mois par mois et jours particuliers pour prolonger le dernier script de ce fil par adjonction des jours particuliers - notamment fériés - d'un mois choisi.

@+


Arx Tarpeia Capitoli proxima...

En ligne

Pied de page des forums