Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#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 :
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=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
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 :
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