Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonctions qui calcul le nombre de jours d écart

    2 novembre 2022 à 18:15:55

    #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. 

    -
    Edité par Byr0n 4 novembre 2022 à 14:24:21

    • Partager sur Facebook
    • Partager sur Twitter
      2 novembre 2022 à 18:20:42

      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 Code 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.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        2 novembre 2022 à 19:11:38

        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) :lol:

        Dans ton exo3 tu as oublié d'utiliser la fonction de l'exo 1

        -
        Edité par umfred 2 novembre 2022 à 19:16:19

        • Partager sur Facebook
        • Partager sur Twitter
          3 novembre 2022 à 0:12:21

          excusez moi voici l ennonce 

          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.
          2. É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.
          3. É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).
          4. 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).
          5. 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.
          • Partager sur Facebook
          • Partager sur Twitter
            3 novembre 2022 à 2:31:13

            @Byr0n Bonjour, merci d'utiliser le bouton code </> pour insérer votre code sur le forum ce qui activera la coloration syntaxique adaptée.

            • Partager sur Facebook
            • Partager sur Twitter
              3 novembre 2022 à 11:09:01

              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?
              • Partager sur Facebook
              • Partager sur Twitter
                3 novembre 2022 à 19:37:23

                j ai reussi l exo 4 mais le 5 est impossible 

                je ne comprend vraiment pas comment on peut faire 

                • Partager sur Facebook
                • Partager sur Twitter
                  3 novembre 2022 à 21:35:25

                  Vous pouvez vous appuyer sur le code source du module python calendar.py

                  Particulièrement la méthode formatyear

                  • Partager sur Facebook
                  • Partager sur Twitter

                  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)

                    3 novembre 2022 à 23:45:09

                    Byr0n a écrit:

                    j ai reussi l exo 4 mais le 5 est impossible 

                    je ne comprend vraiment pas comment on peut faire 


                    Bonjour.

                    Pourtant la question 5 est la plus simple de toutes les questions !!! Ou alors, c´est que je l´interprète mal.

                    Édit : C´est plus la vérification de l´année bissextile qui est importante.

                    -
                    Edité par PB68 3 novembre 2022 à 23:50:52

                    • Partager sur Facebook
                    • Partager sur Twitter

                    PB68

                      4 novembre 2022 à 11:08:13

                      Question 5 me semble aussi facile:

                      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")

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 novembre 2022 à 12:12:48

                        merci bcp pour votre aide mais je débute en python j n ai que 6h d info en main et cela fait 2 jours que je n y arrive pas. 

                        • Partager sur Facebook
                        • Partager sur Twitter
                          4 novembre 2022 à 12:48:30

                          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)

                          -
                          Edité par umfred 4 novembre 2022 à 12:48:42

                          • Partager sur Facebook
                          • Partager sur Twitter
                            4 novembre 2022 à 14:24:54

                            oui excusez moi je viens de tout modifier correctement 

                            • Partager sur Facebook
                            • Partager sur Twitter
                              4 novembre 2022 à 14:47:29

                              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)

                              -
                              Edité par umfred 4 novembre 2022 à 14:47:56

                              • Partager sur Facebook
                              • Partager sur Twitter
                                4 novembre 2022 à 18:16:59

                                je ne peux utiliser aucune autre fonction 

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  4 novembre 2022 à 19:30:18

                                  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
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    5 novembre 2022 à 1:42:26

                                    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.
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    Le Tout est souvent plus grand que la somme de ses parties.

                                      5 novembre 2022 à 20:19:55

                                      l exo nous demande clairement le calendrier de l annee soit le jours le chiffre le mois et l annee 

                                      oui l exercice n a aucun sens mais bon ...

                                      j ai fais le code afficher en haut mais le shell me repond que je depasse lka boucle je ne comprendf pas 

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        6 novembre 2022 à 0:23:38

                                        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))
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        Le Tout est souvent plus grand que la somme de ses parties.

                                          7 novembre 2022 à 10:18:04

                                          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
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          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.
                                          • Editeur
                                          • Markdown