Partage
  • Partager sur Facebook
  • Partager sur Twitter

exercice avec des dictionnaire je n y arrive pas

Sujet résolu
    24 février 2016 à 18:25:48

    Bonjour, j'ai eu un exo qui consistait a comprer le nombre d'occurence d'une lettre dans un mot. Par exemple on entre 'creer' et cela ressort

    {'c:1, 'r':2, 'e':2}

    J'ai donc pensé a un dictionnaire et j'en suis arrivé la :

    def caracteres(s):
        t=list(s)
        d=list(set(t))
        return d    
        
        
    def occurences(s):
        l={}
        liste_s=list(s)
        d=caracteres(s)
    #    lg=len(d)
        for i in d:
            l[i]=0
            for k in liste_s:
                l[i]+=1
        return l    

    malheureusement le code ne marche pas tout a fait comme je le voudrai et ressort ça 

    occurences('kkka')
    
    Out[30]: {'a': 4, 'k': 4}

    j'aimerai que l'on m aide a trouver mon erreur car je suis un débutant et j ai du mal avec ces dictionnaires.

    Merci

    EDIT: je n'ai pas ledroit d'utiliser la méthode count 

    -
    Edité par personne15 24 février 2016 à 18:52:55

    • Partager sur Facebook
    • Partager sur Twitter
      24 février 2016 à 18:47:46

      Je vais te donner deux méthodes pour compter des lettres dans un mot:

      mot = "coucou"
      
      dico = {}
      # Pour chaque lettre dans le mot
      for lettre in mot:
          # Les dictionnaires ont une méthode nommée setdefault.
          # Cette fonction prendre une clé et une valeur.
          # Si le dictionnaire contient la clé donnée, il retourne la valeur qui est
          # stockée. Sinon, il crée la clé avec la valeur fournie (soit 0 ici) et
          # retourne cette valeur. On incrémente ensuite la valeur retournée par 
      # setdefault et on l'assigne à la lettre en court. # Premier tour de boucle: # lettre = 'c' # dico n'a pas de clé nommée 'c' => setdefault la crée et lui assigne 0 # Il retourne 0 et on l'incrémente de 1 # La valeur incrémentée est ensuite assignée à la clé c # dico { 'c': 1 } # # Deuxième tour et 3ème tour même combat # dico { 'c': 1, 'o': 1, 'u': 1 } # # Quatrième tour => lettre = 'c': # setdefault trouve la clé 'c' et retourne sa valeur => 1 # On incrémente la valeur donnée par 1 et on l'a réassigne à la clé 'c': # dico { 'c': 2, 'o': 1, 'u': 1 } # etc ... dico[lettre] = dico.setdefault(lettre, 0) + 1 print(dico) # >>> {'c': 2, 'o': 2, 'u': 2}

      L'autre méthode est d'utiliser un conteneur appelé Counter:

      from collections import Counter
      
      # On compte chaque lettre du mot
      counter = Counter("coucou")
      print(counter)
      # >>> Counter({'o': 2, 'u': 2, 'c': 2})
      
      
      # On peut ensuite rajouter des mots
      counter.update("poux")
      print(counter)
      # >>> Counter({'o': 3, 'u': 3, 'c': 2, 'x': 1, 'p': 1})

      J'espère que cela t'aura aidé. Bon courage pour la suite ;)


      -
      Edité par Kynarth 24 février 2016 à 18:50:09

      • Partager sur Facebook
      • Partager sur Twitter
        24 février 2016 à 18:53:39

        Merci bien que coutn m'étais interdite je ne connaissais pas setdefault cela va surement m'aider

        -
        Edité par personne15 24 février 2016 à 18:56:18

        • Partager sur Facebook
        • Partager sur Twitter
          24 février 2016 à 19:08:51

          je te remercie car ca marche, j'ai juste une autre question pour convertir un dictionnaire en liste j'ai utilisé le .items() y a t il une autre solution ?
          • Partager sur Facebook
          • Partager sur Twitter
            24 février 2016 à 20:32:19

            Avec les dictionnaires tu peux faire:

            dico = { 'a': 0, 'b': 1, 'c': 2 }

            • une liste des clés avec list(dico.keys()) => ['a', 'b', 'c']
            • une liste des valeur avec list(dico.values()) => [0, 1, 2]
            • une liste de tuples avec dico.items() => [('a', 0), ('b', 1), ('c', 2)]

            Ensuite, si tu veux d'autres types de listes, il te faudra les faire toi-même ;)

            • Partager sur Facebook
            • Partager sur Twitter

            exercice avec des dictionnaire je n y arrive pas

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown