Python - Problème compter nombre d’occurrences d'une lettre
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Python - Problème compter nombre d’occurrences d'une lettre



  1. #1
    Marie Sharon

    Unhappy Python - Problème compter nombre d’occurrences d'une lettre


    ------

    Bonjour,

    Je suis novice en Python, et je suis bloquée sur un Pydéfi :
    http://callicode.fr/pydefis/ThorNarcissique/txt

    Voilà mon programme : (le fichier thor.txt correspond à la liste de mots donnés dans l'énoncé)
    Code:
    fichier=open("thor.txt")
    b=[]
    for ligne in fichier :
      t=ligne.count("t")
      h=ligne.count("h")
      o=ligne.count("o")
      r=ligne.count("r")
    if t==1 :
      b.append(t)
    print(b)
    Je voulais compter les occurrences de chaque lettre, mais quand je teste mon programme avec la lettre t, il ne compte pas et je ne sais pas quelle commande je dois utiliser,
    Merci

    -----

  2. #2
    pm42

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Tu penses que ton programme fait quoi ?
    Là, il compte le nombre d'occurence de chaque lettre sur chaque ligne et ignore les résultats.
    Donc en pratique, tu vas juste avoir traité la dernière ligne.
    Ensuite, tu essaie de créer un tableau avec le nombre d'occurences de "t" s'il n'y en a qu'une mais vu que tu le fais hors de la boucle, tu vas avoir un tableau qui va au mieux contenir un seul élément qui sera toujours 1 ce qui ne sert pas à grand chose.

  3. #3
    Marie Sharon

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Tu penses que ton programme fait quoi ?
    Je pensais qu'il comptait les occurrences des 4 lettres demandées pour chaque ligne et donc pour chaque mot, et que je pouvais ensuite lui demander de trier les mots que ne contiennent qu'une seule fois les lettres t, h, o et r, mais je ne sais pas trop comment m'y prendre, du coup c'est faux

  4. #4
    pm42

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Citation Envoyé par Marie Sharon Voir le message
    Je pensais qu'il comptait les occurrences des 4 lettres demandées pour chaque ligne
    Il fait ça mais tu ne fais rien du résultat.

    Citation Envoyé par Marie Sharon Voir le message
    et donc pour chaque mot,
    Tu ne peux pas passer de ligne à mot comme ça.

    Sinon, tu fais une boucle pour chaque ligne. A chaque ligne, tu la sépares en mots. Il y a la méthode split() qui fait ça.
    Là, tu peux compter pour chaque mot avec une autre boucle imbriquée dans la 1ère et s'il ne convient pas, afficher une erreur.

    Mais vu que tu débutes, tu devrais déjà essayer de faire le programme qui marche sur 1 mot.
    Ensuite, tu fais le programme qui prend une ligne, la décompose en mot et tu réutilises ce que tu as fait au dessus pour chaque mot.
    Ensuite, tu fais le programme qui prend un fichier et lit chaque ligne et tu réutilises ce que tu as fait au dessus.

    Comme ça, chaque étape est simple.

  5. A voir en vidéo sur Futura
  6. #5
    Marie Sharon

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Il fait ça mais tu ne fais rien du résultat.
    Je ne sais pas comment exploiter les résultats,

    merci pour les autres conseils, je ne sais pas trop comment m'y prendre mais je vais essayer de chercher

  7. #6
    Jack
    Modérateur

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Il suffit de reproduire la manière de le procéder si tu devais le faire mentalement:que fais-tu du nombre de 't' que tu as comptés dans une ligne quelconque?

  8. #7
    LeMulet

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Citation Envoyé par Marie Sharon Voir le message
    Je ne sais pas comment exploiter les résultats,
    Le résultat est défini dans le défi.
    Il s'agit simplement du comptage (et non pas du listage) du nombre de mots de la "liste de mots" (le fichier thor.txt comprenant 1 mot de la langue française par ligne) qui correspondent à la spécification précisée (le mot doit contenir les lettres t, h, o, r, une et une seule fois).

    Vous avez testé t==1, ce qui est juste, mais vous devez alors aussi tester h==1, etc

    Ensuite, si le résultat est correct, vous devez faire quelque-chose du résultat de ce test (je vous laisse y penser)

    De plus (je ne connais certes pas python), mais je ne vois pas bien où se trouvent les opérations qui doivent s'exécuter DANS la boucle (Or si vous ni moi ne le voyons, peut-être que le compilateur python ne le voit pas non plus... (il faut essayer de se mettre à la place de la machine pour se dire : Si j'étais la machine, comment dois-je comprendre le code source ?)
    (Le code source, c'est "le programme" tel qu'on l'écrit, comme on dit.)

    Y a-t-il des signes (une syntaxe donc) ou une règle qui permet de dire au compilateur quelles sont les instructions qui font partie de la boucle ? (C'est le genre de question qu'on doit se poser lorsqu'on étudie un langage particulier)
    Bonjour, et Merci.

  9. #8
    CM63

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Citation Envoyé par LeMulet Voir le message

    Y a-t-il des signes (une syntaxe donc) ou une règle qui permet de dire au compilateur quelles sont les instructions qui font partie de la boucle ?
    C'est l'indentation. Les instructions a executer par la boucle sont indentées à droite par rapport à la ligne qui initie la boucle, qui se termine par ":". Par exemple

    Code:
    for i in [1,2,3]:
       print i
    suite du programme

  10. #9
    LeMulet

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Citation Envoyé par CM63 Voir le message
    C'est l'indentation.
    D'accord.
    Donc il parait assez évident que le test (incomplet) t==1 ne se trouve pas DANS la boucle.
    Bonjour, et Merci.

  11. #10
    polo974

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Allez, je vous pourri le jeu:
     Cliquez pour afficher


    Au fait, les bouton TEX et SPOILER sont toujours aussi vides...
    Jusqu'ici tout va bien...

  12. #11
    CM63

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Citation Envoyé par polo974 Voir le message
    Au fait, les bouton TEX et SPOILER sont toujours aussi vides...
    Comment ça vides, il te manque le pictogramme sur le bouton, c'est ça? Mais ils sont fonctionnels?

    PS : à oui, c'est ça, je n'avais pas remarqué.
    Dernière modification par CM63 ; 28/03/2019 à 09h46.

  13. #12
    Marie Sharon

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Bonsoir,

    J'ai pu re-regarder mon programme et j'ai trouvé la réponse, j'ai modifié mon code :
    Code:
    fichier=open("thor.txt")
    b=[]
    for ligne in fichier :
      t=ligne.count("t")
      h=ligne.count("h")
      o=ligne.count("o")
      r=ligne.count("r")
      if t==1 and h==1 and o==1 and r==1:
          b.append(ligne)
    print(len(b))
    Merci pour votre aide, j'ai fait des erreurs de débutants mais comme je n'ai pas de cours de codage cette année, je ne vois pas où je me plante

  14. #13
    LeMulet

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Citation Envoyé par Marie Sharon Voir le message
    Bonsoir,

    J'ai pu re-regarder mon programme et j'ai trouvé la réponse, j'ai modifié mon code :
    Pas mal, même si vous allez plus loin que ce qui est demandé dans le défi, à savoir que vous stockez les mots qui satisfont la condition de thor.
    Ce qui peut être intéressant au moment du "débogage" ou de la mise au point (par exemple comme indiqué plus loin, vous pourriez avoir besoin de ces valeurs pour optimiser une condition), mais que vous pourriez ensuite simplifier pour augmenter les performances de votre programme.

    A noter qu'il est important en tant que développeur de respecter ce qu'on appelle le "cahier des charges", et donc produire un programme selon un cahier des charges, c'est respecter scrupuleusement la demande qui y est indiquée, sans plus, ni moins.
    Il n'y a pas de fantaisie à avoir de ce côté (vous pourriez évidemment en discuter avec votre donneur d'ordre si vous l'aviez sous la main, mais ici, dans le cas du défi, ce n'est pas le cas).

    Maintenant, vous pourriez également augmenter les performances du programme (lui faire faire le minimum nécessaire à la réalisation de la tache) en ne faisant pas appel aux variables t,h,o,r intermédiaires et en ne testant que ce qui s'avère nécessaire.

    Par exemple, vous stockez la valeur ligne.count("t") dans la variable t, puis vous effectuez le test t==1
    Au lieu de cela, vous pourriez directement effectuer le test ligne.count("t")==1

    De plus, lorsque vous construisez une condition, comme t==1 and h==1 and o==1 and r==1, en général, et en fonction des options de compilation, le code compilé (le programme qui s'exécute) peut ne pas tester toutes les parties de la condition.
    Par exemple, si t==1 n'est pas réalisé, il est inutile de vérifier si h==1 ou o==1 ou r==1, puisque ça ne changera rien au résultat de la condition totale.
    Donc dans ce cas de figure, le programme ne teste pas si h==1.... et vous avez chargé la valeur de h avec ligne.count("h") pour rien.
    D’où l'intérêt également de ne pas employer de valeur intermédiaire h, mais d'employer directement le test ligne.count("t")==1 etc.

    Ce qui nous amène à une dernière considération.
    Pour éviter de tester des choses pour rien, il vaut mieux effectuer les premiers tests (dans la condition construite) qui ont le plus de chance de s'avérer négatifs (faux).
    Il vaut donc mieux ordonner les tests élémentaires, non pas dans l'ordre t,h,o,r, mais dans un autre ordre plus réfléchi (à vous de voir lequel serait le plus approprié, et ça dépend bien entendu du contenu du fichier thor.txt).



    ligne.count("t")t
    Dernière modification par LeMulet ; 28/03/2019 à 21h21.
    Bonjour, et Merci.

  15. #14
    CM63

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Citation Envoyé par Marie Sharon Voir le message
    Merci pour votre aide, j'ai fait des erreurs de débutants mais comme je n'ai pas de cours de codage cette année, je ne vois pas où je me plante
    Ça me surprendra toujours : "on nous donne des exos à faire sur un truc qu'on n'a pas vu en cours".

  16. #15
    Marie Sharon

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Ça me surprendra toujours : "on nous donne des exos à faire sur un truc qu'on n'a pas vu en cours".
    Alors, non, puisque je suis autodidacte, c'est moi qui ai choisi de faire des pydéfis et d'apprendre à utiliser Python.

    Pour éviter de tester des choses pour rien,
    Oui, je sais que je manque un peu de rigueur mais je n'ai pas encore bien la méthode pour coder, mais je vais faire attention là dessus

  17. #16
    LeMulet

    Re : Python - Problème compter nombre d’occurrences d'une lettre

    Citation Envoyé par Marie Sharon Voir le message
    Oui, je sais que je manque un peu de rigueur mais je n'ai pas encore bien la méthode pour coder, mais je vais faire attention là dessus
    Ce n'était pas un reproche.
    Je trouve que le résultat est pas mal (il atteint le but du défi).
    De plus, il est lisible.
    Et pour préciser, c'est aussi un point qu'on doit envisager (la lisibilité) lorsqu'on réalise un programme.
    Par exemple, ici, lorsqu'il est question de se passer des variables intermédiaires t,h,o,r, si on veut que le programme soit facilement compris par d'autres développeurs (ou même par sois-même lorsque l'éclair de génie se sera éteint ), on peut sciemment conserver ces variables afin de rendre le programme "lisible".

    Quelque-chose qui à mon avis ne doit également jamais être négligé, ce sont les commentaires.
    Le commentaire vous permettra de vous souvenir très rapidement de "la mécanique" du programme.
    De plus, c'est une aide utile pour voir l'algorithme, le modifier etc.
    Pour préciser; la majorité des commentaires servent à décrire l'algorithme.
    Il est par exemple inutile d'écrire t=ligne.count("t") /* Mettre valeur de ligne.count("t") dans la variable t */
    Mais on peut par exemple écrire t=ligne.count("t") /* Nombre de caractères "t" dans un mot) */
    Et plus haut, /* Parcourir les lignes du fichier composé de mots*/
    Etc.
    Bonjour, et Merci.

Discussions similaires

  1. comment compter le nombre de carré ?
    Par invitedf952a08 dans le forum Mathématiques du collège et du lycée
    Réponses: 18
    Dernier message: 29/01/2016, 12h36
  2. python problème algo nombre chanceux
    Par jordan43 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 24/12/2014, 09h50
  3. Python / Raspeberry / Compter impulsions bouton
    Par ludo1919 dans le forum Programmation et langages, Algorithmique
    Réponses: 16
    Dernier message: 27/05/2014, 16h39
  4. [Exercice]Rechercher le nombre d'occurrences d'un caractère dans une chaîne(C)
    Par Rouchesta dans le forum Programmation et langages, Algorithmique
    Réponses: 14
    Dernier message: 10/01/2012, 11h03
  5. compter le nombre de clic
    Par invite0395b98d dans le forum Internet - Réseau - Sécurité générale
    Réponses: 1
    Dernier message: 04/05/2006, 20h41