Question chaine de caractere python

Résolu/Fermé
enam07 Messages postés 5 Date d'inscription vendredi 2 janvier 2015 Statut Membre Dernière intervention 11 avril 2015 - 2 janv. 2015 à 11:36
 Utilisateur anonyme - 2 janv. 2015 à 14:30
Svp j'arrive pas a ecrire une fonction qui renvoie une liste avec le nombre de chaque lettre apparaissant dans le mot saisie par exemple :aaaabbbb ça donne [4,4,0,0...]

3 réponses

ElementW Messages postés 4764 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 295
2 janv. 2015 à 12:10
'lut. "j'arrive pas a ecrire une fonction", et qu'as-tu déjà essayé?
0
enam07 Messages postés 5 Date d'inscription vendredi 2 janvier 2015 Statut Membre Dernière intervention 11 avril 2015
2 janv. 2015 à 12:15
def liste_lettres(mot):
alphabet=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"]
i=0
l=[]
n=0
z=0
while i < 26 :
if alphabet[i] in mot :
n=n+1
l.insert(i,n)
else :
l.insert(i,0)
i=i+1
return l
0
enam07 Messages postés 5 Date d'inscription vendredi 2 janvier 2015 Statut Membre Dernière intervention 11 avril 2015
2 janv. 2015 à 12:16
j'aarive pas a montrer les indentations mais je les ai faites il ya un probleme dans le n quand il y a une lettre qui se repete ça marche pas
0
ElementW Messages postés 4764 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 295 > enam07 Messages postés 5 Date d'inscription vendredi 2 janvier 2015 Statut Membre Dernière intervention 11 avril 2015
2 janv. 2015 à 12:19
Pour les indentations, il y a un bouton qui insère des balises <code> dans ton message et te permet non seulement de les conserver mais aussi d'avoir une coloration syntaxique...
0
Utilisateur anonyme
2 janv. 2015 à 14:30
Bonjour,

Si on regarde le problème, je vois déjà la difficulté de créer 26 éléments représentant chacun le nombre d'occurrence de chaque lettre de l'alphabet. Pour cela, on fera

memory = [0 for i in range(26)]


Ensuite l'autre difficulté est d'ajouter 1 à chaque occurrence trouvée à condition que nos lettres soient des caractères compris entre 'a' et 'z'.
On pourrait utiliser la fonction ord, qui permettra de connaître son code ascii. Ainsi, avoir l'index de la liste memory, se trouvera en faisant une simple soustraction d'entiers.

>>> ord('a')
97
>>> ord('z')
122
>>> ord('c') - ord('a')
2


Ce qui veut dire qu'on ajoute la valeur 1 à l'ancienne valeur se trouvant à l'index 2 de la liste memory.

Pour faire la détection des caractères compris entre 'a' et 'z', c'est algorithme assez simple je trouve.

Si la lettre a une valeur comprise entre 97 et 122
    Faire
        index = ord(lettre) - 97
        ajouter 1 à l'index de memory


Le code python final est aussi simple

def counter(mystr):
    memory = [0 for i in range(26)]
    for c in mystr:
        ascii = ord(c)
        if ascii in range(97, 123):
            index = ascii - 97
            memory[index] += 1
    return memory

s = 'aaaabbbb'

print(counter(s)) # [4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]


Il est possible d'utiliser un module spécifique pour faire cela

from collections import Counter

s = 'aaaabbbb'
occurrences = Counter(s)

print(occurrences)


Bonne continuation...
0