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 :

Suite de Conway


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut Suite de Conway
    salut:
    j'ai l'énoncé suivant:
    Enoncé
    Voici le début d'une suite logique inventée par John Horton Conway (et donc appelée suite de Conway) :
    1
    11
    21
    1211
    111221
    312211
    ...
    Chaque ligne à partir de la deuxième décrit la précédente...
    La première ligne : 1,
    on l'a décrit "Un 1" ce qui donne la deuxième : 11,
    la troisième décrit la deuxième : "Deux 1" : 21
    la quatrième décrit la troième : "Un 2 suivi de Un 1" : 1211
    et ainsi de suite.
    On vous demande d'écrire une fonction next_line(line) qui prend une liste d'entiers décrivant une ligne de cette suite et qui calcule et retourne la liste correspondant à la ligne suivante. Par exemple :
    next_line([1,2,1,1])

    Par convention, next_line([]) retourne la liste [1]

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    C'est simplement un peu de logique.
    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
     
    def next_line(numbers):
        count = 0
        val = numbers[0]
        res = ""
        for n in numbers:
            if n == val:
                count += 1
            else:
                res += "%s%s" %(count, val)
                count = ?
                val = ?
     
        res += "%s%s" %(count, val)
        return res
     
    s = "1"
    print(s)
    for i in range(15):
        s = next_line(s)
        print(s)
    pour ne pas te le donner tout mâché j'ai laissé deux points d'interrogation dans le code tu devrais trouver par quoi les remplacer.

  3. #3
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    pour les chaine de caractère c'est ça je pense : mais j'ai besoin de ça pour les listes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def next_line(numbers):
        count = 0
        val = numbers[0]
        res = ""
        for n in numbers:
            if n == val:
                count += 1
            else:
                res += "%s%s" % (count, val)
                count = val
                val = n
     
                res += "%s%s" % (count, val)
                return res

  4. #4
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    salut,
    voilà la proposition pour les chaine de caractère valide:
    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
    def next_line(numbers):
        count = 0
        val = numbers[0]
        res = ""
        for n in numbers:
            if n == val:
                count += 1
            else:
                res += "%s%s" %(count, val)
                count = 1
                val = n
     
        res += "%s%s" %(count, val)
        return res
     
    s = "1"
    print(s)
    for i in range(15):
        s = next_line(s)
        print(s)

  5. #5
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut la solution proposé avec des listes mais avec erreur index outofrange index
    salut,
    pour les listes j'ai proposé ça:
    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
    def next_line(numbers):
        count = 0
        val = numbers[0]
        res = []
        for n in numbers:
            if n == val:
                count += 1
     
            else:
                res.append(count)
                res.append(val)
                val = n
                count = 1
     
        res.append(count)
        res.append(val)
        return res
    les résultats sont valide pour:
    ok Bon résultat pour next_line([1]) : [1, 1]
    ok Bon résultat pour next_line([1, 1]) : [2, 1]
    ok Bon résultat pour next_line([2, 1]) : [1, 2, 1, 1]
    ok Bon résultat pour next_line([1, 2, 1, 1]) : [1, 1, 1, 2, 2, 1]
    ok Bon résultat pour next_line([1, 1, 1, 2, 2, 1]) : [3, 1, 2, 2, 1, 1]
    ok Bon résultat pour next_line([3, 1, 1, 4, 2, 3]) : [1, 3, 2, 1, 1, 4, 1, 2, 1, 3]
    ok Bon résultat pour next_line([6, 6, 6, 6, 6, 6]) : [6, 6]
    ok Bon résultat pour next_line([1, 3, 1, 1, 1, 3]) : [1, 1, 1, 3, 3, 1, 1, 3]
    ok Bon résultat pour next_line([1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1]) : [6, 1, 7, 2, 3, 1]

    mais il ya un seul erreur :
    Votre programme a été interrompu par une exception: IndexError: list index out of range

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 831
    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 831
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par FATENMRABET Voir le message
    ok Bon résultat pour next_line([3, 1, 1, 4, 2, 3])
    Oui mais la suite de Conway ne peut pas avoir de valeur supérieure ou égale à 4.
    C'est logique. Si la suite contient (par exemple) "4 1", ça veut dire que la ligne précédente contient "1 1 1 1" (quatre "1"). Mais cette ligne (qui décrit la ligne encore avant) signifie que encore un cran plus haut il y a un "1" suivi de un "1" autrement dit "1 1" . Mais cette ligne sera alors décrite par "2 1" et non "1 1 1 1". Donc jamais de 4.
    De la même façon, il n'y aura jamais "3 3".

    Citation Envoyé par FATENMRABET Voir le message
    mais il ya un seul erreur :
    Votre programme a été interrompu par une exception: IndexError: list index out of range
    Oui. C'est ici val = numbers[0]. Si "numbers" est vide, alors cet indice n'existe pas.

    Citation Envoyé par FATENMRABET Voir le message
    Par convention, next_line([]) retourne la liste [1]
    Ben cas particulier à tester au tout début de ta fonction.
    Par ailleurs, tu peux supprimer tes deux dernières modifications de "res" (juste avant le return) si tu réécris l'itération ainsi: for n in tuple(numbers) + tuple((None,)). En rajoutant une valeur "neutre" l'itération se fait une fois de plus ce qui permet de finir de remplir "res". Que tu peux d'ailleurs remplir d'un coup de cette façon: res.extend((count, val)).

    Citation Envoyé par FATENMRABET Voir le message
    pour les chaine de caractère c'est ça je pense : mais j'ai besoin de ça pour les listes
    Plutôt que de faire deux fonctions, checke le paramètre entré. Si c'est une liste tu le convertis en chaine puis tu appliques l'algo des chaines (ou alors tu fais le contraire si c'est une chaine tu le convertis en liste et tu appliques l'algo pour les listes)...
    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]

  7. #7
    Membre très actif
    Femme Profil pro
    étudiante chercheuse
    Inscrit en
    Septembre 2013
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante chercheuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 274
    Par défaut
    salut,
    alors l'erreur est dû à ce que je dois traiter ça :
    Par convention, next_line([]) retourne la liste [1]

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

Discussions similaires

  1. Suite de Conway
    Par printf dans le forum Débuter
    Réponses: 25
    Dernier message: 12/11/2008, 18h54
  2. reauete suite à une requete
    Par 74160 dans le forum Requêtes
    Réponses: 4
    Dernier message: 22/08/2003, 14h42
  3. Migration Access > SQL Server (suite) : Compteur
    Par LadyArwen dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/03/2003, 14h08
  4. Réponses: 2
    Dernier message: 04/03/2003, 23h24
  5. Pb BDE suite a passage en Windows 2000 pro
    Par ARIF dans le forum Paradox
    Réponses: 4
    Dernier message: 18/11/2002, 11h39

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