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 :

Programmation décomposition en produits de facteurs premiers d'un seul nombre [Python 3.X]


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 18
    Points : 0
    Points
    0
    Par défaut Programmation décomposition en produits de facteurs premiers d'un seul nombre
    Salut

    si je ne suis pas au bon endroit, veuillez me pardonner et me faire suivre, merci les amis

    Voilà, je passe du monde C++ à Python et c'est la galère

    Lors d'un travail en groupe, il nous a été demandé la chose suivante:
    On nous demande de respecter ceci dans l'ordre:
    1. Entrer un nombre entier
    2. Si ce nombre est négatif, afficher un message d'erreur et recommencer le programme
    3. Sinon, si ce nombre est 0, le programme termine.
    4. Autrement, afficher la décomposition en produit de facteurs premiers du nombre:

    voici ce que j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    n=int(input("Entrez un nombre entier:"))
    if n<0:
        print("n est négatif, erreur, recommencez")
    elif n==0:
        print("n est nul, Fin du programme")
    else:
        print("n est positif, Poursuivez")

    le seul hic, c'est le côté recommencer, en ligne 2, comment faire ?



    Suite de l'énoncé
    On trouve le plus petit diviseur du nombre, en commençant par 2 ;
    a- Afficher ce diviseur à l’écran
    b- Diviser le nombre par ce diviseur, et recommencer les deux dernières étapes avec ce nombre (plus petit)
    c- Éventuellement ce processus devra s’arrêter (à moi de trouver quand, voir ci-dessous)

    5. Une fois la liste affichée (donc tous les diviseurs), recommencer le programme avec un nouveau nombre


    la suite, et là, c'est la galère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    d=int(input("Entrez le plus petit diviseur: 2"))
    n=n/d
    print(n,"n/d= ",n/d)
    if n=(2,3,5,7,11,13):
        n/d=1
     
    return0;
    voici ce que je veux, via un exemple

    le nombre (n): 20
    le diviseur le plus petit (d) :2

    20/2 = 10

    je reprend le 10 et je le divise par 2
    10/2 = 5

    5 n'est divisible que par lui-même donc
    5/5 = 1

    en somme n=n/d => 10=20/2 => 5=10/2 => 5/5=1
    je fais commencer pour écrire cela en python

    ensuite, je ne veux conserver que les nombre entier, donc comment ne retenir que les résultats n/d entiers (int) et ne pas conserver les float (décimales)

    comment demander à Python de faire 2, puis essayer 3, 4, 5, .... et les afficher

    au final, et cela j'arrive uniquement à le faire sous forme mathématique, c'est d.'écrire le résultat final : 20 = 2*2*5

    une fois cela fait, je veux aussi recommencer le programme (genre voulez vous recomm3encer) au départ en choisissant un nouveau nombre : j'ai pensé à return; mais ça ne marche pas

    j'ai Python: 3.4

    Vraiment besoin d'aide



  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par Intrepid13 Voir le message
    Voilà, je passe du monde C++ à Python et c'est la galère
    C'est la galère parce que tu n'as pas pris la peine d'apprendre un petit peu plus Python (Python est plus facile que C++).

    Lecture recommandée: le livre de Gérard Swinnen qu'on peut télécharger ici: http://python.developpez.com/cours/apprendre-python3/

    Autre chose: quand tu donnes un code dans tes messages, il faut l'entourer par les tags de code (le '#' en haut et à droite de la fenêtre d'édition). Sinon, les indentations disparaissent, ce qui rend ton code illisible et inutilisable. Attention aux indentations: ils matérialisent des blocs de code, et ils ont la même signification que le "{...}" de C++.


    Ceci étant:

    Voilà ton 1er code corrigé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while True:
        n=int(input("Entrez un nombre entier:"))
        if n<0:
            print("n est négatif, erreur, recommencez")
        elif n==0:
            print("n est nul, Fin du programme")
            break # sortie de la boucle while
        else:
            print("n est positif, Poursuivez")
            # ...
            # suite du programme 
            # ...
    Le principe est simple: "while True" est toujours vrai, et donc boucle indéfiniment. On sort de la boucle avec "break" lorsque n==0.


    Pour ton 2ème code:

    on teste si n est divisible par d avec n%d==0 (car n%d est le reste de la division entière de n par d)

    on obtient le résultat (entier) de la division entière de n par d avec: n//d

    Dans ton algorithme, on arrête les divisions quand n==1 puisque 2 est le plus petit nb premier.

    On aura donc 2 boucles while pour l'algorithme: l'une pour arrêter le calcul quand n==1 et l'autre pour essayer tous les diviseurs à partir de 2.

    Voilà un petit code qui fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    d = 2
    while n>1:
        while n%d==0:
            n = n//d
            print("facteur trouvé:", d)
        d += 1
    Ce qui affichera pour n=100:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    facteur trouvé: 2
    facteur trouvé: 2
    facteur trouvé: 5
    facteur trouvé: 5
    Il faut tout de même reconnaitre que cet algorithme est très "rustique", et conduit à faire des tas de calculs inutiles. Mais il donne les bons résultats tout en restant très simple.
    Améliorations possibles:
    - à part d=2, on ne devrait tester que les nombres impairs.
    - pour les premiers diviseurs, on pourrait tester une liste de nombre premiers ([2,3,5,7,11,...])
    - on devrait arrêter le calcul lorsque d>racine du n initial
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Intrepid13 Voir le message
    Voilà, je passe du monde C++ à Python et c'est la galère
    ...
    le seul hic, c'est le côté recommencer, en ligne 2, comment faire ?
    ...
    comment demander à Python de faire 2, puis essayer 3, 4, 5, .... et les afficher
    ...
    une fois cela fait, je veux aussi recommencer le programme (genre voulez vous recomm3encer) au départ en choisissant un nouveau nombre : j'ai pensé à return; mais ça ne marche pas
    Bonjour

    Si tu arrivais à faire ça en C++ je ne comprends pas pourquoi tu n'y arrives pas en Python vu que pour ce travail précis, les syntaxes sont (quasiment) les mêmes. A mon avis, c'est plutôt un pb d'algo que tu as. Surtout vu la petite remarque à propos du <return> qui, aussi bien en C++ qu'en Python, a exactement la même signification qui n'est certainement pas de retourner "quelque part" mais de retourner "quelque chose" !!!
    C'est pourquoi tu devrais t'intéresser à la partie algo du forum...
    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]

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 18
    Points : 0
    Points
    0
    Par défaut Programmation python suite
    Salut
    un gros merci pour les informations et conseils

    donc, pour la seconde partie, je veux:
    tant que d=2 divise n et que le résultat soit un entier, on continue avec d=2.
    si le résultat est décimal, on passe à d=3, et ainsi de suite jusqu'à ce que n/d=1
    une fois n/d=1, arrêter les calculs, écrire la décomposition finale: n=d1*d1*d2*d3*...
    et proposer de recommencer le programme en choisissant un nouveau nombre entier


    Ah j'oubliais, le prof nous fait lire le livre de G Swinnen, mais il n'a lu que les 4 premiers chapitres, donc la fonction "break" pas encore vue, comment la remplacer !
    merci

  5. #5
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Intrepid13 Voir le message
    Ah j'oubliais, le prof nous fait lire le livre de G Swinnen, mais il n'a lu que les 4 premiers chapitres, donc la fonction "break" pas encore vue, comment la remplacer !
    Voilà un code complet sans le break:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    n = 1 # n'importe quelle valeur sauf 0
    while n!=0:
        n=int(input("Entrez un nombre entier:"))
        if n<0:
            print("n est négatif, erreur, recommencez")
        elif n>0:
            print("n est positif, suite du programme")
            d = 2
            while n>1:
                while n%d==0:
                    n = n//d
                    print("facteur trouvé:", d)
                d += 1
        print()    
    print("Fin du programme")
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 18
    Points : 0
    Points
    0
    Par défaut Programmation python suite
    salut
    un gros gros merci, je vois mes erreurs et je els comprends maintenant
    effectivement c++ et python se ressemblent pas mal

    enfin, dernière question

    Je souhaite qu'une fois les facteurs trouvés, soit écrit la décomposition, n=d1*d1*d2*d3*...
    Quelle est l'instruction

    Enfin, une fois cela fait, demander de recommencer le programme en choisissant un nouveau nombre entier

    merci

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 18
    Points : 0
    Points
    0
    Par défaut Programmation python suite
    [code:]retry = int(input("Voulez vous recommencer (oui=1, non=2) :"))
    if retry == "2":

    print( "Bye bye" ) [code:]

    j'ai essayé mais ça marche pas
    des idées

  8. #8
    Membre éclairé
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Points : 751
    Points
    751
    Par défaut
    Ajoute la balise code.

    retry est un int. Tu compares avec un string, donc ca marche pas!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    retry = int(input("Voulez vous recommencer (oui=1, non=2) :"))
        if retry == 2:
            print( "Bye bye" )

  9. #9
    Nouveau Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 18
    Points : 0
    Points
    0
    Par défaut Programmation python suite
    comment je dois m'y prendre alors ?

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Intrepid13 Voir le message
    comment je dois m'y prendre alors ?
    Putain mais tu l'as lu le code de tyrtamos ou bien tu considères que son post n'était là que pour faire joli ??? Comment il compare ses entiers lui ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    retry = int(input("Voulez vous recommencer (oui=1, non=2) :"))
    if retry == 2:   # Pas de quotes autour de l'int !!!
        print( "Bye bye" )
    Accessoirement quand on commence un topic en disant "je viens du monde C++" ça sous-entend "...où je me débrouillais pas mal" ce qui donne une indication sur ton niveau de programmation en général ce qui permet aux intervenants d'adapter leurs réponses. Quand on voit ensuite les questions suivantes, on se demande vraiment ce que tu y faisais dans le monde C++...
    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]

  11. #11
    Nouveau Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    ecoutes

    retry = int(input("Voulez vous recommencer (oui=1, non=2) :"))
    if retry == 2: # Pas de quotes autour de l'int !!!
    print( "Bye bye" )


    je le lances après mon programme et rien ne marche
    alors au lieu d'insulter les gens en détresse, tu ferais mieux d'être indulgent
    je vais sans doute me faire virer, mais j'en ai marre de gars comme toi qui se croient supérieur parce qu'il maitrise le sujet.
    Oui j'étais en C++, mais ce que tu ignores, c'est que j'ai abandonné le cours pour soigner ma leucémie, et là, voyant que j'ai tout oublié, je reviens dans le monde de la programmation et je tente Python et là toi, tu m'insultes !!!!
    Achète toi de la classe, du respect parce qu tu en pas !!!!!

  12. #12
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Intrepid13 Voir le message
    ecoutes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    retry = int(input("Voulez vous recommencer (oui=1, non=2) :"))
    if retry == 2:   # Pas de quotes autour de l'int !!!
        print( "Bye bye" )

    je le lances après mon programme et rien ne marche
    Ouais super. Ben c'est que c'est que tu n'as pas su intégrer ce bout de code correctement dans ton programme (en faisant la charitable hypothèse que ce dernier fonctionne bien entendu vu que tu n'as pas daigné le mettre).

    Citation Envoyé par Intrepid13 Voir le message
    ...de gars comme toi qui se croient supérieur parce qu'il maitrise le sujet.
    Non, qui se contentent juste de manifester leur mauvaise humeur face à un intervenant trop faignasse pour remarquer que la réponse à sa question a déjà été donnée.
    Accessoirement, dans la première réponse de tyrtamos il est écrit "quand tu donnes un code dans tes messages, il faut l'entourer par les tags de code (le '#' en haut et à droite de la fenêtre d'édition".

    Citation Envoyé par Intrepid13 Voir le message
    Oui j'étais en C++, mais ce que tu ignores, c'est que j'ai abandonné le cours pour soigner ma leucémie,
    Oui c'est bien ce que je disais. Dans ce cas là, faut pas dire que tu y étais. Perso j'ai eu un jour une initiation à ada de 2 jours, je n'arrive pas en disant ensuite "je viens du monde ada" !!!
    Tu auras de meilleures réponses si tu dis "je suis totalement débutant" (surtout que ce n'est pas une tare, on a tous été débutants)...

    Citation Envoyé par Intrepid13 Voir le message
    et là, voyant que j'ai tout oublié, je reviens dans le monde de la programmation et je tente Python et là toi, tu m'insultes !!!!
    Non, j'ai juste dit que tu ne lisais pas ce que les autres écrivaient (j'ai cité tyrtamos mais la solution avait aussi été donnée par dahtah). C'est plutôt ça qui serait insultant...

    Citation Envoyé par Intrepid13 Voir le message
    Achète toi de la classe, du respect parce qu tu en pas !!!!!
    Mouais. Si tu veux. Et toi, achète-toi le livre de Swinnen. Ah ben non, il est gratuit !!!
    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]

  13. #13
    Nouveau Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    ok ça marche
    merci pour tes commentaires et navré de m'être emporté
    effectivement je suis ultra débutant et j'espérais que quelqu'un me fasse mon programme. j'ai essayé pendant pas moins de 2 semaines et oui j'ai le livre de Swinnen, et au final, je n'avance pas !
    donc si tu pouvais toi ou quelqu'un d'autre me faire le programme, je me sentirais mieux sans doute. après je travaillerais ce programme pour bien le comprendre

  14. #14
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Citation Envoyé par Intrepid13 Voir le message
    donc si tu pouvais toi ou quelqu'un d'autre me faire le programme, je me sentirais mieux sans doute. après je travaillerais ce programme pour bien le comprendre
    Sauf que ce n'est pas comme cela que ça fonctionne : on n'apprend pas à faire des marathons en regardant les autres courir.
    Soit tu essaies encore et encore, en demandant de l'aide bien sûr si besoin, soit tu t'attaques à des exercices plus simples.
    A quoi bon s’escrimer à sauter 1,50m en hauteur si on n'arrive pas 1,20m ?
    Que quelqu'un te fasse ton programme ne t'aidera en rien à progresser.
    Pas d'aide par mp.

  15. #15
    Nouveau Candidat au Club
    Femme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 18
    Points : 0
    Points
    0
    Par défaut
    ok, alors disons que j'ai essayé voir les messages plus haut et je ne parviens pas à la fin de recommencer ou pas
    j'ai essayé mais rien ne fait
    merci de m'aiguiller

  16. #16
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Citation Envoyé par Intrepid13 Voir le message
    ok, alors disons que j'ai essayé voir les messages plus haut et je ne parviens pas à la fin de recommencer ou pas
    j'ai essayé mais rien ne fait
    merci de m'aiguiller
    Dans le post de Tyrtamos, le fait d'entrer 0 permet de sortir de la boucle, n'est-ce pas ce que tu souhaites ?

    Pour ton affichage, une idée : utiliser une liste (vide au départ, et que tu remplis au fur et à mesure) ?

    [edit]

    Essaie par exemple le code suivant (celui de Tyrtamos avec quelques "print()" et une liste) avec le nombre 130 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    n = -1 # n'importe quelle valeur sauf 0
    while n!=0:
        n=int(input("Entrez un nombre entier : "))
        if n<0:
            print("n est négatif, erreur, recommencez")
        elif n>0:
            print("n est positif, suite du programme")
            d = 2
            L =[]
            while n>1:
                print(d)
                while n%d==0:
                    print(n, d, n%d)
                    n = n//d
                    L.append(d)
                    print("facteur trouvé : ", d)
                d += 1
                print(L)    
    print("Fin du programme")
    Pas d'aide par mp.

  17. #17
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Intrepid13 Voir le message
    j'ai essayé mais rien ne fait
    merci de m'aiguiller
    Il faut décomposer tes problèmes. Ici tu en as 2
    • faire un travail de décomposition d'un nombre
    • répéter ce travail tant que tu as une certaine condition (ou bien jusqu'à ce que tu n'aies plus une certaine condition)

    Si tu décompose alors ça en 2 étapes, tu pourras les tester individuellement

    Par exemple tu pourrais écrire une fonction dédiée à la décomposition d'un simple nombre
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def decomp(n)
        ... (code de la fonction)...
    # decomp()

    Une fois que ta fonction "fonctionne" correctement (ce qu'on nomme les "tests unitaires"), tu l'intègres dans une boucle de répétition
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    n=True   # Pour démarrer la boucle
    while n != 0:
       n=int(input("Entrez un nombre entier : "))
       decomp(n) 
    # while()
    Et si la boucle ne "boucle pas" alors tu regardes pourquoi (en gros tu affiches tes variables, tu mets l'appel de la fonction en commentaire pour la désactiver voir si ça vient de là, bref tu "examines" les paramètres de ton code).

    Ensuite quand c'est ok, tu rajoutes des fioritures (tester que le nombre est positif, etc)...
    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]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Décomposition en facteurs premiers
    Par Invité dans le forum Mathématiques
    Réponses: 7
    Dernier message: 23/04/2012, 23h39
  2. Réponses: 1
    Dernier message: 08/04/2009, 12h17
  3. Décomposition en facteurs premiers
    Par Girl24 dans le forum Fortran
    Réponses: 6
    Dernier message: 18/11/2008, 13h08
  4. Décomposition d'entier en produit de facteurs
    Par shangai3 dans le forum Pascal
    Réponses: 7
    Dernier message: 30/06/2007, 17h57
  5. Décomposition en facteurs premiers
    Par méphistopheles dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 07/11/2005, 20h56

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