Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question Python sur les conditions

Erreur exercice année bisextile

Sujet résolu
    31 juillet 2019 à 15:18:03

    Bonjour à tous,

    C'est mon premier post et Je débute en Python ;-)

    Je viens d'écrire le programme ci-dessous permettant de déterminer si une année est bissextile ?

    e programme fonctionne mais malheureusement pour certaines années il se trompe (du moins celui qui l'a écrit ...).

    En 1996 par exemple, l'année est bissextile mais le code me répond que non.

    J'ai le sentiment que c'est la variable d'initialisation qui pose problème.

    Quand j'écris anne_bisextile = True ça marche

    mais si j'initialise par annee_bisextile = False en 1996 ça me met une année non bissextile.

    Merci par avance pour votre aide.

    • Partager sur Facebook
    • Partager sur Twitter
      31 juillet 2019 à 15:38:37

      Pour moi ton code fonctionne avec 1996, ceci dit tu as des bouts de codes inutiles, si tu as ta variable année bissextile déjà initialisée à False ça ne sert à rien de créer des conditions pour la redéclarer False 

      -
      Edité par Jojuss 31 juillet 2019 à 15:41:13

      • Partager sur Facebook
      • Partager sur Twitter
        31 juillet 2019 à 15:47:28

        Merci pour ton aide.

        Je viens de réessayer en redémarrant Python et toujours un souci de mon côté :

        Entrez une année :1996

        1996 : Est-ce une annee bisesxtile ? False

        En effet mon code est loin d'être optimisé mais j'aimerais comprendre en quoi le fait d'initialiser la variable sur "False" a un impact.

          Zouhir.

        • Partager sur Facebook
        • Partager sur Twitter
          31 juillet 2019 à 16:25:58

          Et bien la logique d'initialiser ta variable à False c'est de chercher uniquement les conditions qui nous donnent une année bissextile True, comme ça si les conditions sont validées tu sais que ton année est bissextile et si elles ne sont pas validées et bien la valeur de ta variable ne changera pas et donc vaudra False comme prévu.

          Si ca peut t'aider on peut réécrire le code comme ça : (en me basant sur tes conditions, j'ai testé vite fait ça semble marcher)

          a=int(input())
          if a%4 == 0 and a%100 != 0 or a%100 == 0 and a%400 == 0:
              print("bis")
          else :
              print("non bis")



          -
          Edité par Jojuss 31 juillet 2019 à 16:50:55

          • Partager sur Facebook
          • Partager sur Twitter
            31 juillet 2019 à 17:12:30

            Bonjour,

            Ligne 14, tu as oublié un "e" à "annee".

            • Partager sur Facebook
            • Partager sur Twitter
              31 juillet 2019 à 17:39:43

              Petite "astuce".

              Quand tu as une condition "vraie" dans un if, elle est forcément "fausse" dans le else.

              Donc il est inutile d'écrire la condition "fausse".

              Exemple :

              if a % 4 != 0:
                  ...
              # Si on arrive ici, cette condition est forcément vérifiée
              elif a % 4 == 0:
                  ...
              

              Donc ton code peut se réécrire

              if a % 4 != 0:
                  annee_bissextiln = False
              elif a % 100 != 0:
                  # Implicitement a % 4 == 0
                  annee_bissextiln = True
              elif a % 400 != 0:
                  # Implicitement a % 4 == 0 et a % 100 == 0
                  annee_bissextiln = False
              else:
                  # Implicitement a % 4 == 0 et a % 100 == 0 et a % 400 == 0
                  annee_bissextiln = True



              En une ligne, ça donne

              annee_bissextile = (a % 4 == 0 and a % 100 != 0) or a % 400 == 0

              Attention, les parenthèses sont obligatoires ici.

              • Partager sur Facebook
              • Partager sur Twitter
                24 septembre 2019 à 14:25:22

                Un nouvel employé travaille sur son premier projet en Python mais le code ne semble pas fonctionner. Pouvez-vous l'aider en disant ce qui ne va pas? def zip (* args, fillvalue = None):     longueur_max = max ([len (lst) pour lst dans les arguments]);     résultat = [];     pour i dans la plage (max_length):         result.append ([             args [k] [i] si i <len (args [k]) else None pour k dans la plage (len (args));         ])     retour (résultat);
                • Partager sur Facebook
                • Partager sur Twitter

                Question Python sur les conditions

                × 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