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

  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 240
    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 240
    Billets dans le blog
    48
    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 240
    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 240
    Billets dans le blog
    48
    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 : 30388
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 : 32725
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 ..

  7. #7
    Responsable Arduino et Syst�mes Embarqu�s


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 240
    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 240
    Billets dans le blog
    48
    Par d�faut
    En Python tu peux retourner plusieurs valeurs, du genre :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    return list_syrac, temps_vol, temps_vol_altitude, altitude_maxi
    Tu peux retourner aussi un dictionnaire (voir FAQ, cours...) :
    Code python : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    def syrac(n):
    ...
        dico={}
        dico['liste']=list_syrac
        dico['temps vol']=temps_vol
        dico['temps vol altitude']= temps_vol_altitude
        dico['altitude maxi']=altitude_maxi
        return(dico)
     
     
    n=125    
    print ("suite de syracuse n=", n)    
    for cle, valeur in syrac(n).items():
        print (cle,":",valeur)

    Remarque : le premier �l�ment de ta liste est n, initialement listsyrac=[n].

    Sinon, poste ton code par copier-coller avec les bonnes balises plut�t que des copies d'�cran, ce sera plus facile pour ceux qui veulent r�cup�rer ton code pour le tester.

  8. #8
    Expert �minent
    Homme Profil pro
    Architecte technique retrait�
    Inscrit en
    Juin 2008
    Messages
    21 772
    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 772
    Par d�faut
    Salut,

    Une fonction doit faire une chose simple d'autant que les informations que vous essayez de calculer dans la boucle sont faciles a obtenir � partir de la liste retourn�e.
    Ecrivons:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> def syracuse(n):
    ...     rs = []
    ...     while n != 1:
    ...        if n % 2:
    ...           n = n*3+1
    ...        else:
    ...           n = n // 2
    ...        rs.append(n)
    ...     return rs
    ...
    Avec ��, on obtient:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    >>> L = syracuse(3)
    >>> L
    [10, 5, 16, 8, 4, 2, 1]
    >>>
    Pour savoir le nombre d'�l�ments de la liste:
    Quand au maximum:
    Bien s�r, vous pouvez ajouter des instructions dans la boucle "while" pour calculer tout �� au fur et a mesure, mais �� complique la fonction et �� vous fait passer � c�t� de fonctions simples telles que "len" et "max" qui sont l� pour vous �viter cette gal�re.

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

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