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 :

Programme sur la conjecture de Syracuse


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Par défaut Programme sur la conjecture de Syracuse
    Bonjour tout le monde,
    J'ai besoin d'un petit coup de main sur la programmation de la conjecture de Syracuse.
    Le problème est simple, on se donne un entier plus grand que 1:
    - S'il est pair, on le divise par deux
    - S'il est impair, on le multiplie par 3 et on lui ajoute 1
    On "conjecture" que l'on finit toujours par trouver la valeur 1

    Voici mon programme:
    Je dois donner les entiers de mon entier définit jusqu'à ce qu'il atteigne la valeur1, sous forme d'une liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def syrac(n):
     
        listsyrac=list()
        if (type(n) != type(1) or n<1):
            return None 
     
        while n!=1:
            if n%2 == 0:
                n=n/2
            else:
              n=(n*3)+1
            print(n)
    C'est dans l'afichage de la liste que je bloque .. Je ne sais pas comment ajouter les valeurs de n au fur et à mesure avec uen boucle While. Avec une boucle For j'utilise append mais la je ne sais pas comment faire l'analogie ..
    Si quelqu'un pouvait m'éclairer un peu ? Merci.

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 189
    Billets dans le blog
    47
    Par défaut
    Bonjour,

    Citation Envoyé par VincentBr Voir le message
    Je ne sais pas comment ajouter les valeurs de n au fur et à mesure avec uen boucle While. Avec une boucle For j'utilise append mais la je ne sais pas comment faire l'analogie
    Et qu'est-ce qui t'empêche de faire un append dans un while ?

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Par défaut Suite du programme
    Merci f-leb, j'avais finalement réussi à trouver la solution avec append.

    Voici la suite de mon programme:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    def syrac(n):
        I=0   
        listsyrac=list()
        if (type(n) != type(1) or n<1):
            return None 
        while n!=1:
            if n%2 == 0:
                n=n/2
            else:
              n=(n*3)+1
            I=I+1
            listsyrac.append(n)
     
     
        print("'La trajectoire de l'entier', n , 'est:' ")
        print(listsyrac)
        print(I)
     
     
    def caractvol(n):
        syrac(n)
        #Temps de vol#
        print("Le temps de vol de cet entier est: ")
        print(I)
     
        #Altitude Maximale#
        def altitudemaximale(listsyrac):
        max=listsyrac[0]
        for j in range (len(listsyrac)):
            if listsyrac[j]>max:
                max=listsyrac[j]
    Maintenant, je suis face à un autre problème, je dois réutiliser ma fonction 'syrac(n)' (soit les résultats de cette fonction) pour écrire une autre fonction qui me donnera:
    - Le temps de vol = le nombre d'étapes à franchir avant d'arriver pour la première fois à 1
    - L'altitude maximale = le nombre le plus élévé atteint par la fonction syrac

    Mon problème vient du fait que je ne sais pas comment l'ordinateur gère les résultats des variables de ma fonction syrac(n); soit 'listsyrac' et 'I'. 'I' me sert de compteur pour le temps de vol, pas de problème lorsque je fais tourner ma fonction syrac(n) toute seule mais lorsque j'utilise ma fonction syrac(n) dans ma deuxième fonction caractvol(n), j'obtiens l'erreur "I is not defined".
    Comment je peux résoudre ce problème ?
    De la même facon, Python me signale que 'max' n'est pas définit ..
    Une solution s'il vous plaît ?

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 189
    Billets dans le blog
    47
    Par défaut
    Tu t'en sortiras mieux si ta fonction retourne la liste :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def syrac(n):
        ....
        ....
        return listsyrac


    dans une console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> print (syrac(15))
    [15, 46, ... ]

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Par défaut
    Il y a quelque chose que je ne comprends .. que j'écrive syrac(15) ou print(syrac(15)). Ma liste est toujours affichée.
    Mais la valeur de I n'est jamais retourné ..

    Nom : Capture d’écran 2014-10-26 à 15.10.24.png
Affichages : 30332
Taille : 49,5 Ko

    Comment faire pour afficher la valeur de I ?
    Ma boucle ne lit pas I ?

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 8
    Par défaut
    Je viens de repérer le problème ..

    Nom : Capture d’écran 2014-10-26 à 15.21.09.png
Affichages : 32663
Taille : 67,4 Ko

    Une fonction ne peut retourner qu'une seule variable ?
    Il affecte à I, la valeur 17 mais après il me dit qu'elle n'est pas défini .. ? Je suis perdu ..

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/01/2005, 11h36
  2. [Eclipse] Programmer sur un fond noir
    Par raj dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 27/12/2004, 10h15
  3. [Reseau] Execution de programmes sur un autre PC
    Par el3gans dans le forum Général Java
    Réponses: 5
    Dernier message: 18/11/2004, 11h20
  4. Methode de programmation sur des gros projets
    Par dynobremo dans le forum EDI
    Réponses: 10
    Dernier message: 08/06/2004, 02h59
  5. Déclenchement Programme sur Virtual Key
    Par Tom-G dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 09/05/2003, 12h58

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