#exo 1
def bissextile(a):
if a%4==0 and a%100!=0:
bissextile = True
elif a%400==0:
bissextile = True
else:
bissextile = False
return bissextile
#exo 2
def nbjoursannee(a):
if bissextile(a):
nb = 366
else:
nb = 365
return nb
#exo 3
def nbjoursmois(a,m):
if m in [4,6,9,11]:
return (30)
elif m in [1,3,5,7,8,10,12]:
return (31)
elif (a%4==0 and a%100!=0) or a%400==0:
return (29)
else:
return (28)
#exo 4
def nbjours(jn,mn,an,j,m,a):
nb= nbjoursmois(an,mn)-jn+j
for i in range(12-mn):
nb=nb+nbjoursmois(an,mn+i)
for j in range(12-m+1):
nb=nb-nbjoursmois(a,m+j)
if bissextile(an)==True:
nb=nb-1
while an!=a:
nb = nbjoursannee(an) + nb
an = an+1
return nb
#exo 5
annee=int(input("Veuillez donner une année : "))
jours=["Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi","Dimanche"]
mois=[1,2,3,4,5,6,7,8,9,10,11,12]
moislettre=["janvier","février","mars","avril","mai","juin","juillet","août","septembre","octobre","novembre","décembre"]
jourschiffre=[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]
calendrier=[]
compteur=0
for i in range(12):
if annee%7==0:
for j in range(nbjoursmois(annee,mois[i-1])):
calendrier.append(jours[-1+compteur])
calendrier.append(jourschiffre[j])
calendrier.append(moislettre[i])
calendrier.append(annee)
compteur=compteur+1
if compteur==7:
compteur=0
elif annee%7==1:
for k in range(nbjoursmois(annee,mois[i-1])):
calendrier.append(jours[compteur])
calendrier.append(jourschiffre[k])
calendrier.append(moislettre[i])
calendrier.append(annee)
compteur=compteur+1
if compteur==7:
compteur=0
elif annee%7==2:
for h in range(nbjoursmois(annee,mois[i-1])):
calendrier.append(jours[1+compteur])
calendrier.append(jourschiffre[h])
calendrier.append(moislettre[i])
calendrier.append(annee)
compteur=compteur+1
if compteur==7:
compteur=0
elif annee%7==3:
for l in range(nbjoursmois(annee,mois[i-1])):
calendrier.append(jours[2+compteur])
calendrier.append(jourschiffre[l])
calendrier.append(moislettre[i])
calendrier.append(annee)
compteur=compteur+1
if compteur==7:
compteur=0
elif annee%7==4:
for m in range(nbjoursmois(annee,mois[i-1])):
calendrier.append(jours[3+compteur])
calendrier.append(jourschiffre[m])
calendrier.append(moislettre[i])
calendrier.append(annee)
compteur=compteur+1
if compteur==7:
compteur=0
elif annee%7==5:
for n in range(nbjoursmois(annee,mois[i-1])):
calendrier.append(jours[4+compteur])
calendrier.append(jourschiffre[n])
calendrier.append(moislettre[i])
calendrier.append(annee)
if compteur==7:
compteur=0
compteur=compteur+1
elif annee%7==6:
for o in range(nbjoursmois(annee,mois[i-1])):
calendrier.append(jours[5+compteur])
calendrier.append(jourschiffre[o])
calendrier.append(moislettre[i])
calendrier.append(annee)
compteur=compteur+1
if compteur==7:
compteur=0
print(calendrier)
Bonjour j ai un dm en info et je suis bloque a l exo 4. Le but est de a l aide des fonctions précédentes.
voici ce que j ai fais mais le code numéro 5 ne marche pas et je ne comprend pas comment faire pour qu'il marche? merci de bien vouloir m aider.
Bonjour, Pas d'image de code totalement inutilisable par copier/coller pour tests éventuels.
Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention. Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé. Pour plus d'informations, nous vous invitons à lire les règles générales du forum
Merci de colorer votre code à l'aide du bouton Code
Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: python;">Votre code ici</pre>.
Merci de modifier votre message d'origine en fonction.
il faudrait nous remettre l'énoncé aussi, parce qu'on ne sait pas ce que tu dois faire avec les fonctions précédentes ( et surtout à quoi correspondent tes variables)
Dans ton exo3 tu as oublié d'utiliser la fonction de l'exo 1
Écrire une fonction bissextile (a) qui renvoie un booléen indiquant si l'année a est une année bissextile. On rappelle qu'une année bissextile est une année multiple de 4 mais pas de 100, ou multiple de 400.
Écrire une fonction nbjoursannee (a) qui renvoie le nombre de jours de l'année a, en utilisant la fonction de l'exercice précédent pour savoir si l'année a est bissextile.
Écrire une fonction nbjoursmois (a, m) qui renvoie le nombre de jours dans le mois m de l'année a, en utilisant la fonction de la question 1. pour savoir si l'année a est bissextile. On suppose que le mois m est un entier compris entre 1 (pour janvier) et 12 (pour décembre).
En utilisant les fonctions des questions précédentes, écrire une fonction nbjours(jn, m n, an, j, m, a) qui renvoie le nombre de jours compris entre deux dates données (par exemple votre date de naissance et la date d'aujourd'hui).
En utilisant la fonction nbjoursmois de la question 3., écrire un programme qui demande une année à l'utilisateur et affiche le calendrier de cette année, c'est-à-dire la liste de tous les jours de tous les mois.
Principe de base: comment tu ferais pour faire le calcul à la main avec les fonctions que tu as écrites avant (dont essentiellement une fonction qui donne le nombre d'une année (qui gère les années bissextiles), et une fonction qui donne le nombre de jours d'un mois d'une année). Pour donner une idée, besoin de 3 infos:
combien d'années pleines entre les 2 dates ?
combien de jours pour terminer l'année de la date la plus ancienne ?
combien de jours dans l'année de la date la plus récente jusqu'au jour de cette date?
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
on demande une saisie utilisateur de l'année (penser à la convertir en entier, en considérant que l'utilisateur va bien rentrer une année en chiffre)
comme tu as l'année, une année ayant 12 mois (on va faire simple et éviter les changements historiques de calendrier), et la fonction nbjoursmois renvoyant le nombre de jour d'un mois d'une année, yaka afficher le numéro des jours du mois 1 (janvier) puis des mois suivants (a priori il n'y a pas de style de présentation de demander, sinon c'est ça le "plus complexe")
il n'y a besoin que de boucles avec des bornes bien choisies. Que ce soit en python ou autre langage, le principe du code va rester pareil.
Montre ce que tu as fait (et utilise la balise de code, le bouton </> pour insérer ton code comme indiquer plus haut par AbcAbc6 et profites en pour le éditer ton 1er message pour en faire de même)
Je réitère: Dans l'exo 3 pourquoi ne pas utiliser bissextile au lieu de refaire les tests ?
exo 5 tu as vraiment besoin des liste mois et jourchiffre?
reprend "à la main" ce que fait ta fonction: pourquoi faire un modulo 7 sur annee ? si c'est pour calculer quand tombes le jour de la semaine, je crois que ce n'est pas bon ( il existe la fonction datetime.weekday() (module datetime) qui donne l'info sur base de lundi=0)
Tu es sûr qu'on te demande d'afficher le jour de la semaine? je ne comprends pas l'énoncé comme ça. Mais si tu y tiens, il y a des algos pour calculer le jour
Pour l'exercice 5, en dehors du fait que l'année ssaisie peut être bissextile, toutes les années vont se ressembler. Je me demande le pourquoi de cet exercice. Supposons que je ne peux utiliser aucune des fonction des modules de Python, comment ferais-je pour écrire l'équivalent de calendar? Ça me prend une année de référence pour laquelle je connais le jour de la semaine du premier janvier. Et je calculle la "différence" entre les deux premiers janvier.
Le Tout est souvent plus grand que la somme de ses parties.
Je me suis amusé à coder les 4 premièrs exemples en lambda avec toutes les fonctions utiles. Je n'ai pas encore essayé le cinquième: - bissextile = lambda a: a%400 == 0 or (a%4 == 0 and a%100 != 0) nbjoursannee = lambda a: 365 + bissextile(a) nbjoursmois = lambda a, m: (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)[m-1] + (bissextile(a) and m==2) def nbjours(ad, md, jd, af, mf, jf): if (ad, md, jd) > (af, mf, jf): return -nbjours(af, mf, jf, ad, md, jd) jours = 0 if ad < af: # Si c'est pas la même année. # On complète l'année en cours. jours += sum(nbjoursmois(ad, m) for m in range(md, 12+1)) - jd + 1 md = 1 jd = 1 # Si on a des années complètes entre les deux, on les ajoute. jours += sum(nbjoursannee(a) for a in range(ad+1, af)) # On complète avec la dernière année jours += sum(nbjoursmois(af, m) for m in range(md, mf)) + jf - jd return jours # ad, md, jd = map(int, input("Date de départ: ad md jd ").split()) af, mf, jf = map(int, input("Date d'arrivée: af mf jf ").split()) print(nbjours(ad, md, jd, af, mf, jf))
Le Tout est souvent plus grand que la somme de ses parties.
Comme je l'ai dit dit il y a des algo qui permettent de déterminer le 1er jour d'une année; à partir de là, il est facile de dérouler
Le calcul du jour o`u tombe le 1er janvier d’une ann´ee est donn´ee dans l’ouvrage « A Collection of Programming Problems and Techniques », H.A. Maurer and M.R. Williams, Prentice-Hall 1972 : (36 + y + y div 4 − y div 100 + y div 400) mod NJOURSSEM avec y = annee − 1 et NJOURSSEM(= 7) le nombre de jours dans une semaine.
Dans cet algo 0=dimanche, Lundi=1, ... Donc une fonction pour déterminer ce jour, et hop
fonctions qui calcul le nombre de jours d écart
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
PB68
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.