IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Boucle dans ma liste (debutant)


Sujet :

Python

  1. #21
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par chris7522 Voir le message
    Dans def get_value() , quel est precisement le role de " continue" ?
    Quelle est l'intention? Demandez à l'utilisateur de recommencer la saisie.

    Et dans les boucles, vous avez deux instructions "bizarres": break pour en sortir et continue pour boucler encore... ce qui permet d'écrire aussi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                if nombre <= 0:
                     print("Ce doit etre un nombre supérieur a 0 ")
                else:
                     break
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                if nombre > 0:
                     break
                print("Ce doit etre un nombre supérieur a 0 ")
    Dans ce cas, il faudra mettre le return à la sortie de la boucle.

    Ce sont différentes façons pour avoir au bout du compte, le même résultat.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  2. #22
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par chris7522 Voir le message
    pouvez vous m'expliquer pas a pas le test qui est fait a cet endroit ?
    Ben... je t'aime bien donc ok mais à un moment donné, il faudra quand-même mettre réellement tes neurones en action !!!
    Un nombre est premier si on ne trouve aucun diviseur autre que 1 et lui-même. Bon, ok. Donc par exemple pour 37, on ne testera pas ni le "1" ni le "37" qui divisent tous deux le nombre sans rien prouver à son sujet. Il reste donc 2, 3, 4, 5, etc jusqu'à 36 à tester. Or tous les diviseurs pairs ont été testés par le test n%2 == 0 donc j'ai déjà éliminé toute la moitié des possibilités. Ne me reste que les diviseurs impairs (3, 5, 7, 9, etc) donc les cas qui, à partir de 3, montent deux à deux d'où le i+=2. Ici un esprit attentif pourra dire que le diviseur "9" est déjà testé dans le diviseur "3" (si un nombre est divisible par 9, il est fatalement divisible par 3) donc je pourrais le sauter. C'est vrai mais si je veux aller dans cette optique, je dois aussi la faire pour le diviseur "25" qui est déjà testé par le diviseur "5" et etc et donc je ne dois prendre alors que les diviseurs premiers de la liste ce qui m'oblige à les calculer au préalable. Cet algorithme existe (crible d'Erastothène) mais il n'est rentable que quand on veut chercher des nombres premiers dans une liste de nombre et non pas tester un seul nombre. Donc tant pis, ici c'est plus rapide de tester 3 puis, plus tard, tester inutilement 9 que de regarder si 3 est premier puis tester 3, puis regarder si 5 est premier pour alors tester 5 puis regarder si 7 est premier pour tester 7 puis regarder si 9 est premier pour alors ne pas le tester.

    Ensuite à chaque itération, j'ai une première possibilité où i divise n => n % i == 0. Si c'est ça, le nombre n'est plus premier => return False.
    Et si c'est pas ça, j'arrive alors sur une seconde possibilité où le résultat de n // i devient plus petit que i. Et si c'est le cas, alors le nombre est fatalement premier. Ben oui, prenons 187 (11*17). Si j'arrive sur le cas 187 // 17 = 11, ça veut dire que je serai obligatoirement passé par le cas 187 // 11 = 17 un peu avant. Donc si j'arrive à cette bascule où n // i devient plus petit que i et que je n'ai pas trouvé de diviseur, alors je n'en trouverai plus => le nombre est premier => return True.
    Et si je ne suis pas passé par ces deux possiblités, je monte "i" à l'impair suivant et je recommence. Je sais que tôt ou tard je passerai par un des deux cas. Ma boucle retournant donc obligatoirement une valeur True/False à un moment donné, ma fonction est finalisée et je n'ai besoin de rien d'autre.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #23
    Nouveau membre du Club
    Homme Profil pro
    Deficient visuel
    Inscrit en
    Mai 2019
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Deficient visuel

    Informations forums :
    Inscription : Mai 2019
    Messages : 196
    Points : 37
    Points
    37
    Par défaut
    Waou , la , c'est du haut vol ! Avec ca , vous gagnez haut la main " question pour un codeur " ou " Les chiffres et les lettres " sans les lettres . Si un jour Etchebest fait un top chef programmeur , il vous prend directement dans sa brigade !
    Treve de plaisanterie , je suis toujours impressionné par la générosité et la patience dont vous faites preuve . Votre altruisme vous honore .
    Merci

  4. #24
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Sve@r Voir le message
    Ici un esprit attentif pourra dire que le diviseur "9" est déjà testé dans le diviseur "3" (si un nombre est divisible par 9, il est fatalement divisible par 3) donc je pourrais le sauter. C'est vrai mais si je veux aller dans cette optique
    Aller un peu plus loin serait de constater que les nombres premiers supérieurs à 3 sont de la forme 6k±1 et écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def isprime(n: int) -> bool:
        """Primality test using 6k+-1 optimization."""
        if n <= 3:
            return n > 1
        elif n % 2 == 0 or n % 3 == 0:
            return False
        i: int = 5
        while i * i <= n:
            if n % i == 0 or n % (i + 2) == 0:
                return False
            i += 6
        return True
    Mais je n'ai aucun mérite: c'est ce qu'on trouve clef sur porte sur Wikipédia. D'où l'importance de regarder l'état de l'art même pour des sujets aussi anciens (nous avons écrit/appris pas mal de choses depuis le crible d'Erathosthène).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Faire une boucle dans une liste déroulante
    Par gudule1er dans le forum IHM
    Réponses: 5
    Dernier message: 26/03/2019, 09h51
  2. Réponses: 7
    Dernier message: 09/08/2007, 14h07
  3. [DEBUTANT]faire une boucle dans une procédure stockée
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/06/2007, 13h49
  4. [debutant] insertion d'éléments dans une List
    Par gwenou60 dans le forum Composants
    Réponses: 1
    Dernier message: 05/12/2005, 09h59
  5. Réponses: 3
    Dernier message: 02/07/2004, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo