Partage
  • Partager sur Facebook
  • Partager sur Twitter

code pour les nombre premier qui ne marche pas

Sujet résolu
    31 décembre 2015 à 11:49:58

    Bonjour, j'ai un DM a rendre sur python ou il faut créer une fonction qui permet de dire si un nombre est premier j'en ai donc crée une mais elle ne marche pas, il y a une autre solution en utilisant une boucle while mais je n'ai pas envie de l'utiliser.Je voulais savoir si il étais possible de m'aider a corrigr ce code merci

    def estpremier(n):
        if int(n)==1 or int(n)==0:
            return False
        if n in [2,3,7]:
            return True
        elif int(n)%2==0:
                return False
        else:
    #        rn=int(n**0.5)
            for k in range(3,n+1):
                if int(n)%k==0:
                    return False
                    break
                else:
                    return True
                    break
    



    -
    Edité par personne15 31 décembre 2015 à 11:53:29

    • Partager sur Facebook
    • Partager sur Twitter
      31 décembre 2015 à 12:50:15

      Tu cherche bien trop complexe !

      Ta première condition est jute (tu peux la remplacer par if n < 2:, c'est plus joli), mais les deux suivantes ne sont pas utiles.

      Après ta première condition, remet juste la boucle. Il faudra simplement la commencer a 2 (le premier nombre premier). Ensuite, l'erreur que tu as tient a la conception de ta boucle. Dès la première itération, elle va retourner soit True, soit False, et ne va donc itérer qu'une fois. Or, tu ne dois l'interompre que si il s'avère que ton nombre n'est pas premier.

      Idéalement, pour concevoir une telle fonction, les différentes opérations, conditions et boucles servent a détecter si la condition est fausse, et ne doivent mener uniquement a un return False, ou a continuer le programme. Le seul returne True devrait etre en fin de fonction, en valeur de retour par defaut, si la fonction ne s'est pas terminée "prématurément".

      Et puis, les break sont totalement inutiles aprés un return : le return interompt la fonction !

      • Partager sur Facebook
      • Partager sur Twitter
      (2b || !2b) ? that : is->theQuestion - Hamlet
        31 décembre 2015 à 13:00:55

        Merci webalorn, j'ai bien compris tes 2 premiers paragraphe mais je ne comprend pas le dernier il faudai que j'enlève donc un return mais lequel? je ne te suis pas bien, désolé je commence tout juste le python et j'ai un peu de mal :)

        mon code corrigé

        def estpremier(n):
           if n<2:
               return False
           else:
               for k in range(2,n+1):
                if int(n)%k==0:
                       return False
                else:
                       return True



        -
        Edité par personne15 31 décembre 2015 à 13:02:58

        • Partager sur Facebook
        • Partager sur Twitter
          31 décembre 2015 à 14:08:06

          La ton code est presque bon, il se rapproche beaucoup plus du "bon" code. Par contre, dans ta boucle, pour bien comprendre, je vais te montrer étape par étape l'éxécution de ton code :

          appel de estPremier(9)
          test : 9 < 2 -> faux
          donc on arrive a la boucle. On commence avec la valeur 2.
               test de 9%2 == 0 -> faux
               donc on fait le else et on retourne TOUT de suite true, avant de tester le 3, qui nous prouverait que 9 n'est pas premier

          Voila l'erreur principale. Ensuite, regarde ta boucle. Tu teste la disivibilité de n par lui-même lors de la dernière itération...

          Enfin, fait attention a l'indentation: sur ton code, si tu l’exécute tel que je le vois ici, il plantera

          -
          Edité par webalorn 31 décembre 2015 à 14:08:46

          • Partager sur Facebook
          • Partager sur Twitter
          (2b || !2b) ? that : is->theQuestion - Hamlet
            31 décembre 2015 à 14:16:57

            Ok je pense que celui là est bon du coup merci j'ai compris je crois
            def estpremier(n):
               if n<2:
                   return False
               else:
                   for k in range(2,n):
                       if int(n)%k==0:
                           return False
               return True
                           
            • Partager sur Facebook
            • Partager sur Twitter
              31 décembre 2015 à 17:08:56

              Oui, très bien ! Par contre, le else est inutile: si le if est réalisé, la fonction s'arrète direct. Donc tu peux arriver a un code simple est concis comme celui-ci:

              def estpremier(n):
                 if n<2:
                     return False
                 for diviseur in range(2,n):
                     if n%diviseur == 0:
                         return False
                 return True


              Version courte:

              def estpremier(n):
                 return n > 1 and not [k for k in range(2, n) if n%k == 0]



              -
              Edité par webalorn 31 décembre 2015 à 17:17:34

              • Partager sur Facebook
              • Partager sur Twitter
              (2b || !2b) ? that : is->theQuestion - Hamlet
                31 décembre 2015 à 17:48:32

                Merci beaucoup de ton aide :). Je passe le poste en résoluy du coup
                • Partager sur Facebook
                • Partager sur Twitter

                code pour les nombre premier qui ne marche pas

                × 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