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 :

Petit problème d'algorithme


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 31
    Par défaut Petit problème d'algorithme
    Bonjour, je suis débutant en langage python et je viens d'écrire ce petit code :

    01 x = ["a", "b", "c", "d", "e"]
    02 y = [ [ ] ]
    03 i = 0
    04 While i < len(x) - 1 :
    05 if x[i] != y[i] :
    06 y = y.append([])
    07 i = i + 1
    08 print(x)
    09 print(y)


    Vous l'aurez peut être compris, je veux que chaque fois que l'interpréteur trouve un élément dans la liste x, il ajoute une liste vide à la liste y. La ligne 5 pose problème - je n'arrive pas à trouver la bonne comparaison. Pouvez-vous m'aider s'il vous plaît? Merci d'avance pour votre réponse.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Bonsoir,

    Utilise la balise [code] (symbole # dans la barre d'outils de l'éditeur), s'il te plaît. Sans cela le code est presque incompréhensible, vu que l'indentation est syntaxiquement importante en Python.

    Cela dit, ta description de l'algorithme n'est pas claire. Que cherches-tu à faire exactement ? Avoir une liste y qui contient autant de listes vides qu'il y a d'éléments dans x ? Ou d'éléments uniques dans x ? Donne quelques exemples d'entrées (x) et de sorties (y) souhaitées si tu as du mal à le décrire.

  3. #3
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut
    Bonjour,

    Outre l'algorithme, j’attire ton attention sur un point :
    y est une liste, une liste est un objet sur lequel on applique la méthode .append()
    Cela s'écrit :
    http://docs.python.org/tutorial/datastructures.html

    Sinon voici des pistes pour compléter ton algorithme (il y a beaucoup de solutions mais en restant dans ton idée)
    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
    x = ["a", "b", "c", "d", "e"]
    y = [ [ ] ]
    i = 0
    while i < len(x) - 1 :
        if x[i] != y[i] :
            y.append([]) #Pas y=y.append([])
            i = i + 1
    print (x)
    print (y)
     
    # Avec un dictionnaire
    x2 = ["a", "b", "c", "d", "e","a"]
    y2={}
    for c in x2:
        if c not in y2 :
            y2[c]=1
        else :
            y2[c]+=1
    print (x2)
    print (y2)

  4. #4
    Membre éprouvé
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Par défaut
    Je suis sous Python 2.6.5 et je ne comprend pas qu'il ya des chiffres séparer par des espaces dans les noms des variables ???
    Normalement un nom de variable commence par une lettre et peut en contenir tout comme des chiffres et le symbole de soulignment ('_') en python 2.6.5 mais j'ai entendu dire que les chiffres était autoriser comme premier charactère de nom de variable en Python 3.

    Bon après nos bon conseils afin de te guider dans ta quète de python et si tu souhaite continuer voici les liens pour télécharger la doc officielle de python (en anglais):
    Pour python 2.6.7: http://docs.python.org/release/2.6.7/download.html
    Pour python 2.7.2: http://docs.python.org/download.html
    Pour python 3.1.3: http://docs.python.org/release/3.1.3/download.html
    Pour python 3.3a: http://docs.python.org/dev/py3k/download.html
    Ces document te seront très utile dans ta quète de python.

  5. #5
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 304
    Par défaut
    Citation Envoyé par Luke spywoker Voir le message
    Je suis sous Python 2.6.5 et je ne comprend pas qu'il ya des chiffres séparer par des espaces dans les noms des variables ???
    J'ai eu la même réaction.



    Ce ne sont pas des noms de variables mais des numéros de lignes suivis de noms de variables.

    Citation Envoyé par selver057 Voir le message
    ... je veux que chaque fois que l'interpréteur trouve un élément dans la liste x, il ajoute une liste vide à la liste y.
    Quelque chose comme ça quoi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    >>> x = ["a", "b", "c", "d", "e"]
    >>> y = [[]] * len(x)
    >>> y
    [[], [], [], [], []]

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 31
    Par défaut Petit problème de programmation
    Merci à tous pour vos conseils

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 31
    Par défaut Petit problème de programmation
    Je corse un peu l'affaire :

    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
    class Nom_Prenom(object):
    ...      def __init__(self):
                  x = [ ]
                  y = [ ]
                  i  = 0
                  while i < len(x) - 1 :
                          if x[i] != y[i]:
                               y.append([ ])
                                i = i + 1
    ...      def ajouterNom(self):
                  n = input("Entrez un nom : ")
                  if n in x:
                          print ("Attention! Ce nom existe deja.")
                          n = input("Entrez un nouveau nom : ")
                          x.append(n)
                          y.append([ ])
    ...      def afficher(self):
                  print (x)
                  print (y)
    >>>
    >>>
    >>> G = Nom_Prenom()
    Quelle doit être la suite des appels pour pouvoir tester l'algorithme?

  8. #8
    Membre expérimenté Avatar de alexdevl
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2007
    Messages : 265
    Par défaut
    Bonjour,
    J'ai l'impression que tu pars un peu dans tout les sens .
    par exemple comme cité plus haut par vinsS (c)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                  while i < len(x) - 1 :
                          if x[i] != y[i]:
                               y.append([ ])
                                i = i + 1
    peux être remplacé par
    Il te manque des bases il me semble

    Essaie de suivre un tutoriel pour être graduel dans l’apprentissage :
    Exemple :
    http://python.developpez.com/cours/TutoSwinnen/

    Amicalement

    Alex

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 31
    Par défaut Petit problème de programmation
    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
    class Nom_Relation(object):
    ...      def __init__(self):
                  x = []
                  y = [[]] * len(x)
    ...      def ajouterNom(self):
                  n = input("Entrez un nom : ")
                  if n in x:
                          print ("Attention! Ce nom existe deja.")
                          n = input("Entrez un nouveau nom : ")
                          x.append(n)
    ...      def afficher(self):
                  print (x)
                  print (y)
    >>>
    >>>
    >>> G = Nom_Prenom()
    Voilà j'ai fait comme vous m'avez conseillé (VinsS et Alex) en remplaçant la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      while i < len(x) - 1 :
                          if x[i] != y[i]:
                               y.append([ ])
                                i = i + 1
    par :
    Cela allège effectivement l'ensemble. Je suis peut être en train de m'emballer et je ferai mieux de commencer à la base et d'apprendre étape par étape mais pourriez-vous déjà me signaler les problèmes de l'algorithme et me montrer comment le tester. Ce sera au moins ça de gagné au fur et à mesure que j'avance. Merci

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 31
    Par défaut Petit problème de programmation
    J'ai laissé une erreur à la ligne 16 :

    Logiquement ça devrait être :


  11. #11
    Expert confirmé

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

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

    Lorsque tu fais G = Nom_Relation() tu crée simplement une instance, nommée G de ta classe Nom_Relation

    Python exécutera d'office la fonction __init__() mais uniquement celle-la, pour les autres, il faut les appeler avec l'instance.

    exemple, si tu veux entrer cinq nouveaux noms:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    G = Nom_Relation()
     
    for i in range(5):
        G.ajouterNom()
    après cela viendra une erreur:
    x est inconnu dans l'espace de nom de cette fonction, il aurait fallu en conserver une référence dans la fonction __init__(self)
    en faisant simplement ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    self.x = []
    self.y = [[]] * len(x)
    et plus loin:
    Pareil dans la fonction afficher.

Discussions similaires

  1. Algorithme, petit problème mathématique
    Par GoustiFruit dans le forum Débuter
    Réponses: 8
    Dernier message: 23/06/2009, 15h01
  2. Petit problème avec l'algorithme de Dijkstra
    Par Raiden1234 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 28/11/2008, 16h22
  3. Réponses: 17
    Dernier message: 13/07/2004, 20h37
  4. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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