CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Debutant python] nombres premier

Randy-Legacy
Randy-Legacy
Niveau 22
07 novembre 2015 à 16:15:41

J'aurais besoin d'aide pour vérifier si un nombre est premier :

pour le moment j'ai ça

def is_prime(n):
racine=math.sqrt(n)
if n ==1 or n==0:
return False
elif n==2:
return True
elif n%2==0:
return False
else:
for i in range(2,n+1,1):
if n%i==0:
return False
else:
return True

mais ça me donne pas les bonnes valeurs j'ai du me tromper

J'aimerai ensuite afficher les n premiers nombres premiers ( mais j'aimerai réussir is_prime en premier :) )

Merci d'avance pour votre aide

edit: j'arrive pas à avoir les bonnes indentation avec jvc donc n'en tenez pas compte

Message édité le 07 novembre 2015 à 16:20:10 par Randy-Legacy
Schiffer
Schiffer
Niveau 10
07 novembre 2015 à 16:30:02

Utilise la balise code pour l'indentation ou poste sur pastebin
Sinon elle sert à quoi la variable racine ?

Randy-Legacy
Randy-Legacy
Niveau 22
07 novembre 2015 à 16:52:01

Racine ne sert à rien, en faites il y a plusieurs méthodes pour vérifier si un nombre est premier, et je pouvais vérifier ça en regardant si le nombre n'était pas divisible par aucun des nombres premiers plus petit ou égaux à la racine du nombre

et j'ai pas réussi à le faire comme ça :hap:

Schiffer
Schiffer
Niveau 10
07 novembre 2015 à 18:53:53
def is_prime(n):
    racine=int(math.sqrt(n))
    if n ==1 or n==0:
        return False
    elif n==2:
        return True
    elif n%2==0:
        return False
    else:
        for i in range(3,racine+1):
            if n%i==0:
                return False
           # Pas de else, faut pas que ça retourne une valeur si n%i != 0 
           # sinon la boucle va s'arrêter
    return True
Message édité le 07 novembre 2015 à 18:57:56 par Schiffer
Korback
Korback
Niveau 10
07 novembre 2015 à 18:55:27

http://www.gladir.com/CODCODER/PYTHON/nombrepremier.htm

Grimmys
Grimmys
Niveau 19
07 novembre 2015 à 19:39:58

Bah il me semble que c'est la meilleure manière qui soit, fin' en tout c'est la seule que je connaisse, doit être la plus simple... :hap:

Bon sinon le problème est tout con, tu as bien la bonne méthode, rassure toi.

Simplement que l'utilisation de return met fin à ta fonction.
Du coup, voilà ce qu'il se passe au niveau de ta boucle :

  • Début de la boucle, i vaut alors 2, on regarde donc si notre nombre est divisible ou non par 2 ( en passant, tu l'as déjà vérifié plus tôt, du coup c'est inutile, tu devrais plutôt initialiser à 3 ).
  • Si il l'est, alors on met fin à la fonction en retournant False : le nombre n'est pas premier ( jusque là, tout va bien ).
  • Sinon, on met fin à la fonction en retournant True : le nombre est considéré comme premier.

Tu vois le problème ?
Ta fonction n'analyse que la divisibilité avec le premier nombre, non les suivants. :)

Sinon pourquoi ça ne fonctionnait pas avec la racine ? :(
Normalement, il y a juste à changer l'intervalle :
range(3,racine+1)

Enfin en écrivant si je viens de me rappeler ce que tu as zappé : il faut convertir cette racine en nombre entier. :ok:

Randy-Legacy
Randy-Legacy
Niveau 22
07 novembre 2015 à 23:07:58

Merci pour votre aide, c'est clair et précis :)
Je ne sais plus pourquoi j'ai pas réussi avec la racine, je me suis surement planté dans le code

J'aimerai maintenant afficher les n premiers nombres premiers en réutilisant ma fonction is_prime

je devrais donc avoir en entré un entier n et je vais devoir obtenir en retour une liste avec les n premiers nombres premiers :hap:

Tout d'abord j'ai pensé à convertir n en une liste (mais je pense qu'il doit y avoir un autre moyen)
puis dire que si n vaut 0 alors retourner une liste vide et sinon je dois appliquer la fonction is_prime pour tout les éléments de la liste et si c'est vrai j'ajoute ces nombres dans une nouvelle liste

déjà je pense pas que je puisse modifié un "int" directement en une liste j'ai pensé à autre chose.
Je me suis dis que la longueur de la liste doit initialement afficher n chiffres donc la longueur de la liste doit être égal à n ?

bref je sais pas vraiment comme m'y prendre , merci d'avance :)

Message édité le 07 novembre 2015 à 23:10:24 par Randy-Legacy
Schiffer
Schiffer
Niveau 10
07 novembre 2015 à 23:27:36

Pourquoi se compliquer la vie ? Tu fais une boucle jusqu'à n et à chaque itération si is_prime est True t'affiche le nombre

Randy-Legacy
Randy-Legacy
Niveau 22
08 novembre 2015 à 09:35:52

Oui mais ça doit afficher une liste :(


def prime_numbers(n):
    if n==0:
        return []
    else:
        for i in range(1,n):
            if is_prime(i)==0:
                return i 

là je teste si chaque élément jusque n est premier ( enfin je pense )
Pour que ça retourne une liste je dois utiliser append quand c'est true ?

Randy-Legacy
Randy-Legacy
Niveau 22
08 novembre 2015 à 09:43:04

Je me suis trompé c est == True sur l'avant dernière ligne

Schiffer
Schiffer
Niveau 10
08 novembre 2015 à 12:28:18

oui tu devrais faire un append au lieu de return i

Message édité le 08 novembre 2015 à 12:28:39 par Schiffer
Randy-Legacy
Randy-Legacy
Niveau 22
08 novembre 2015 à 17:09:17

 def prime_numbers(n):
       liste=[]
     if n==0:
         return []
     else:
         for i in range(n):
             if is_prime(i)==True:
                     liste.append(i)

J'ai essayer de mettre un print "test" sur le else et pour n=12 ca me retourne 7 fois test et 1 fois None a la fin

Donc ca veut dire que de 0 à 12 pour les elements de n c'est jamais premier vu que ca m affiche "test" et donc ca va dans le else :/

Message édité le 08 novembre 2015 à 17:12:13 par Randy-Legacy
Schiffer
Schiffer
Niveau 10
08 novembre 2015 à 17:46:21

Ta fonction devrais retourner quelque chose non ?

Randy-Legacy
Randy-Legacy
Niveau 22
08 novembre 2015 à 17:54:59

Mais oui, je dois retourner liste j'avais zappé :)

Encore merci :oui:

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware
La vidéo du moment