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 :

Nombre de fois qu'un caractère apparait dans un mot


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2024
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2024
    Messages : 13
    Par défaut Nombre de fois qu'un caractère apparait dans un mot
    Bonjour,

    Je cale vraiment sur un codage qui permet de compter chaque lettre figurant dans un mot.
    Par exemple: anana

    la lettre a apparait 3 fois
    la lettre n apparait 2 fois
    etc

    J'ai créé ce code mais trop fastidieux même si le résultat du programme pourrait être visible, mais le problème, il compte aussi les lettres ne figurant pas dans le mot.

    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
    from collections import defaultdict
     
    mot =(input("Entrez un nouveau mot: "))
     
    chars = defaultdict(int)
     
    for char in mot:
     
        chars[char] += 1
     
    print("la lettre a apparait",chars["a"],"fois")
    print("la lettre b apparait",chars["b"],"fois")
    print("la lettre c apparait",chars["c"],"fois") 
    print("la lettre d apparait",chars["d"],"fois")
    print("la lettre e apparait",chars["e"],"fois")
    print("la lettre f apparait",chars["f"],"fois")
    print("la lettre g apparait",chars["g"],"fois")
    print("la lettre h apparait",chars["h"],"fois")
    print("la lettre i apparait",chars["i"],"fois")
    print("la lettre j apparait",chars["j"],"fois")

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

    Votre code devrait fonctionner (et si vous pensez qu'il ne fonctionne pas postez un code fonctionnel entre balises qu'on puisse exécuter sans le modifier).
    Sinon on écrira plutot:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> from collections import Counter
    >>> Counter('anana')
    Counter({'a': 3, 'n': 2})
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Citation Envoyé par sergebourlon Voir le message
    mais le problème, il compte aussi les lettres ne figurant pas dans le mot.
    Comment est-ce possible ?

    Si vous saisissez un mot, comment votre programme peut compter les lettres d'un autre mot ?

    En reprenant votre code avec un chouïa de changements :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    from collections import defaultdict
     
    mot: str = input("Entrez un nouveau mot: ")
     
    chars: dict[str, int] = defaultdict(int)
     
    for char in mot:
        chars[char] += 1
     
    for letter in chars:
        print(f"lettre {letter} citée {chars[letter]} fois")
    Résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Entrez un nouveau mot: pomme
    lettre p citée 1 fois
    lettre o citée 1 fois
    lettre m citée 2 fois
    lettre e citée 1 fois
    Le compte est bon et nulle lettre non comprise dans le mot n'est citée.

    Pouvez-vous être plus précis dans votre soucis ?

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 212
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 212
    Par défaut
    Hello,
    Citation Envoyé par Arioch Voir le message
    Comment est-ce possible ?
    Si vous saisissez un mot, comment votre programme peut compter les lettres d'un autre mot ?
    ben en fait moi ce que j'ai compris , c'est que le code de sergeboulon compte systématiquement les occurrences de lettres pour toutes les lettres de l'alphabet. Le code de wiztricks ou le tien correspond à ce qui est demandé puisque qu'il ne va compter que les lettres présentes dans la chaîne de caractères.
    Ami calmant, J.P

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 540
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 540
    Par défaut
    il compte uniquement les lettre de son mot, mais il affiche systématiquement le compte de chacune des lettres (présente ou pas) (dans le code copié, il ne nous a mis l'affichage des lettres de a à j, mais je suppose que ça continue jusqu'à z (et ça ne plante pas (KeyError) grâce au defaultdict(int) qui va généré les entrées non existantes)
    Donc la dernière boucle d'Arioch résoudra le souci du PO en ne bouclant que sur les lettres présentes dans le mot saisi

  6. #6
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 603
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 603
    Par défaut
    Citation Envoyé par umfred Voir le message
    il compte uniquement les lettre de son mot, mais il affiche systématiquement le compte de chacune des lettres (présente ou pas) (dans le code copié, il ne nous a mis l'affichage des lettres de a à j, mais je suppose que ça continue jusqu'à z (et ça ne plante pas (KeyError) grâce au defaultdict(int) qui va généré les entrées non existantes)
    Ah oui, bien vu ! Et en effet, pas d'exception KeyError levée car c'est un defaultdict.

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

    Difficile d'utiliser un defaultdict (un dictionnaire où on a codé la méthode __missing__) sans trop savoir utiliser les dictionnaires "de base" (et itérer sur les clefs).

    Si on ne sait pas utiliser les dictionnaires, on peut quand même faire cet exercice sans: on compte les occurrences de chaque lettre via un tableau à 26 positions et l'aide des fonction ord et chr. Ce qui serait un exercice riche en boucles et conditions...

    Comme on ne sait pas le python que le PO est supposé connaître (pour reformuler son comptage de caractères)... difficile de l'aider (pour autant qu'il veuille progresser et non se débarrasser d'un exercice à faire sans trop en profiter pour apprendre à jouer avec les concepts qui lui ont été présentés jusqu'ici).

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

  8. #8
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2024
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2024
    Messages : 13
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    Difficile d'utiliser un defaultdict (un dictionnaire où on a codé la méthode __missing__) sans trop savoir utiliser les dictionnaires "de base" (et itérer sur les clefs).

    Si on ne sait pas utiliser les dictionnaires, on peut quand même faire cet exercice sans: on compte les occurrences de chaque lettre via un tableau à 26 positions et l'aide des fonction ord et chr. Ce qui serait un exercice riche en boucles et conditions...

    Comme on ne sait pas le python que le PO est supposé connaître (pour reformuler son comptage de caractères)... difficile de l'aider (pour autant qu'il veuille progresser et non se débarrasser d'un exercice à faire sans trop en profiter pour apprendre à jouer avec les concepts qui lui ont été présentés jusqu'ici).

    - W
    Justement, je veux progresser et comprendre.
    D'où quelques questions :

    1. quand doit on utiliser le module defaultdict ?
    2. quelle différence entre les variables char et chars ? Comment les exploiter ?
    3. Pourquoi le "int " ?

    Merci

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Bonjour
    Citation Envoyé par sergebourlon Voir le message
    Justement, je veux progresser et comprendre.
    1. quand doit on utiliser le module defaultdict ?
    ??? mais c'est toi qui l'a utilisé ! si tu utilises une chose sans savoir ce quelle apporte, pourquoi avoir fait ce choix ?
    cette classe va juste être utile pour se passer d'un if (clé existe déjà ou pas)

    2. quelle différence entre les variables char et chars ? Comment les exploiter ?
    3.
    ? tu ne comprends trictement rien à ton code ? c'est une question d'une personne qui n'a pas encore codé en python... Difficile de bien te répondre si tu n'as fait aucun tuto ni lu aucun cours.

    Si ton niveau est aussi bas, il faut utilisé uniquement ce que tu connais (censé connaitre)

    Une version (depuis ton code ?) avec uniquement un dico (clair que cela change tout )
    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
    mot = "ananas"  # input("Entrez un nouveau mot: ")
     
    compteurs = {}
    for caractere in mot:
        if caractere not in compteurs:
            compteurs[caractere] = 0    # créer un compteur pour cette lettre
        compteurs[caractere] = compteurs[caractere] + 1
     
    print(compteurs)
    for lettre in compteurs:
        print("lettre", lettre, "citée", compteurs[lettre], "fois")
    # ou:
    print()
    for lettre, nombre in compteurs.items():
        print("lettre", lettre, "citée", nombre, "fois")

  10. #10
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par sergebourlon Voir le message
    1. quand doit on utiliser le module defaultdict ?
    2. quelle différence entre les variables char et chars ? Comment les exploiter ?
    3. Pourquoi le "int " ?
    Rien n'oblige à utiliser un defaultdict... qui n'est pas un module (c'est collections le module) mais une classe qui hérite d'un dictionnaire standard. Dans ce cas particulier, je préfèrerais utiliser Counter (qui hérite aussi du dict standard) parce que moins de lignes de code auto-documentées (pas la peine d'ajouter de commentaires pour comprendre ce que ça fait).

    Citation Envoyé par sergebourlon Voir le message
    Mais ici le nouveau prof nous demande des exercices pour lesquels on pas fait d'exemples de ce type l'an dernier.
    Vous ne devez pas recopier des trucs plus ou moins assimilés mais construire une solution avec le python que vous connaissez. Il y a 2 dimensions dans la programmation. La première est de concevoir une méthode/algorithme qui sera capable de donner une solution. Et la seconde (mais c'est liée) sera de pouvoir traduire cela en code (en instructions du langage python).

    Quelque part, compter les occurrences des lettres du mot "anana", c'est associer aux lettres 'an' les occurrences 3, 2. Et le soucis sera de fabriquer liste des lettres du mot, celle des occurrences sachant que la iieme lettre apparait occurrences[i].
    Notez que dans mon dernier post, je parlais d'un tableau à 26 positions (autre façon de faire "association" entre lettre et occurrence).

    A vous de trouver la méthode qui vous paraîtra la plus facile à traduire dans le python que vous connaissez.

    Après vous pouvez prendre le raccourci d'utiliser defaultdict... (un dictionnaire est une association!) mais cela suppose d'aller potasser ce que sont les dictionnaires pour pouvoir s'en servir (et pas venir ici demander de l'aide: de toutes façons on ne vous expliquera pas ce que son les dictionnaires aussi bien que n'importe quel tuto décent).

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/11/2021, 16h24
  2. Réponses: 6
    Dernier message: 08/04/2018, 14h04
  3. Réponses: 2
    Dernier message: 11/04/2017, 13h59
  4. Réponses: 2
    Dernier message: 21/10/2016, 18h43
  5. [SimpleXML] Compter le nombre de fois ou une balise apparait dans un fichier xml.
    Par Krabbos dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 07/06/2011, 12h20

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