Problème de programmation Python

Bonjour,
je dois faire un programme qui renvoie l'occurrence de chaque lettre dans un texte, mais je suis bloquée car chaque programme indépendant ne fonctionne pas. Voici mon programme:

def formatage(texte):
"""formate le texte"""
if len(texte) <= 0:
print("Le texte doit comporter au moins 1 lettre.")
alphabet = "abcdefghijklmnopqrstuvwxyz"
if texte in alphabet:
texte = texte.lower()
texte_propre = texte.replace(" ","")
return texte_propre

def comptage(nb_lettre):
"""compte le nombre de lettre et sa position dans l'alphabet"""
nb_lettre = [0]*26
for lettre in texte_propre:
position = alphabet.index(lettre)
nb_lettre[position] = nb_lettre[position] + 1
return nb_lettre[position]

def frequence(lettre_dans_texte):
"""calcule la fréquence d'apparition des lettres dans le texte"""
lettre_dans_texte = len(texte)
nb_lettre[alphabet.index(i)] = (nb_lettre / lettre_dans_texte * 100)
frequence = nb_lettre[alphabet.index(i)]
return frequence

def affichage(menu):
"""présentation"""
menu = input("Bonjour, ce programme vous permet d'afficher la fréquence de chaque lettre dans un texte. \nVeuillez entrer votre texte: ")
return menu

def main():
texte = affichage(menu)
texte = formatage(texte)
texte =

Merci d'avance pour votre aide :)

12 réponses

Résumé de la discussion

Le sujet porte sur la création d'un programme qui renvoie l'occurrence de chaque lettre dans un texte, mais l'étudiant rencontre des blocages liés à l'exécution et à des fonctions non appelées. Plusieurs propositions évoquent des améliorations cruciales: éviter les définitions isolées sans appels, remplacer la logique par une table de hachage et simplifier le code pour compter les lettres et leurs fréquences. Des ajustements pratiques incluent l'utilisation de collections comme defaultdict pour accumuler les fréquences, et l'importance d'appeler les fonctions afin que le programme produise des résultats visibles. En cas de reste ambigu, certaines propositions insistent sur la nécessité de tester pas à pas et d'afficher clairement les sorties plutôt que de se concentrer sur des reformulations théoriques.

Bobot (l’IA à votre service)
  1. Bonjour Eleve,

    "Je ne sais pas comment faire du coup pour les "appeler""

    Pour les appeler, c'est la base du langage Python, tu as eu un cours sur le langage, ou au moins

    une documentation ?

    Le principe est là:

    #definition de la fonction "test"
    def test():
        print('Coucou !')
    
    #appel de la fonction "test"
    test()
    


    et ca imprime à l'écran : Coucou !
    0
    1. Salut Phil, je lui ai demandé de poster son réveil pour voir s’il avait écrit des fonctions et les avait appelées.
      Si oui lui faire remarquer, qu’il avait déjà le faire
      0
    2. @Utilisateur anonymeSalut Whismeril,

      Ah ok, désolé

      Comme ca fait 3 fois que je répète la même chose depuis le début et que la plupart répondent à coté ... :-)
      0
  2. Je ne peux pas choisir un exercice plus simple. Avant ce programme, j'ai fait des programmes plus simples, c'était pour commencer à programmer et connaitre les bases. Par exemple, programmer un réveil à une certaine heure et sur différent jour, ou un morpion,...
    0
    1. OK poste le code de ce réveil
      0
    2. @Utilisateur anonymeL'exercice était :
      Écrivez une fonction alarme_heure(jour, on_vacation) qui prend comme paramètre

      un jour sous forme entier codé de la manière suivante
      0 = dimanche,
      1 = Lundi,
      2 = Mardi,
      ... 6 = Samedi)
      et un booléen en_vacance
      et retourne une chaîne de caractère de la forme "7:00"indiquant quand le réveil doit sonner.
      En semaine, l'alarme devrait être "7:00" et le week-end, elle devrait être "10:00".

      Sauf si nous sommes en vacances :

      alors en semaine, il devrait être "10h00"
      et les week-ends, il devrait être "off".

      Ma réponse est :
      def alarme_heure(jour, on_vacation):
          if on_vacation == False: 
              if (jour >= 1 and jour < 6):
                  return '7:00'
              return '10:00'
          if (jour >= 1 and jour < 6):
              return '10:00'
          return 'off'
      0
    3. @EleveOK et quand tu lances ce code il fonctionne tel quel?
      0
    4. @EleveSalut,
      Hein !? En message 22, tu ne postes que la définition de la fonction. Whis te demande ton code en entier parce qu'il ne l'est pas car en message 25 tu dis qu'il fonctionne très bien.
      0
  3. Je ne sais pas comment faire du coup pour les "appeler"
    0
    1. Contributeur
      je pense que tu dois commencer par des exercices plus simples.
      0
    2. @yg_bePour le moins, as tu déjà fait des exercices plus simples?

      Si oui, montre un exemple
      0
  4. Surement, mais le problème de base, c'est que les fonctions ne sont pas appelées

    quand je vois qu'il y a une fonction main(), je me dis que peut-être Eleve pense que cette

    fonction se lance au départ, à l'instar de la fonction int main() du C ....

    Il nous faudrait une réponse de sa part ...
    0
    1. Je dois mettre toutes mes fonctions dans la fonction main (pour faciliter la lecture et faire comme un résumé de toutes mes fontions)
      0
    2. @Eleveok mais comme tu n'appelles jamais main, il ne se passe rien ....
      0
  5. from collections import defaultdict
    
    texte = "ceci est un texte"
    freq = defaultdict(lambda: 0)
    
    for c in texte:
        if c.isalnum():
            freq[c] += 1
    
    for k, v in freq.items():
        print("Frequence de", k,":", v)
    


    C'est l'occasion de le faire fonctionner du coup
    0
    1. Tu crois vraiment qu'une table de hachage soit à son niveau? S'il donne ça à son prof, il va se faire saquer

      Et puis, je te rappelle qu'une solution toute cuite est contraire à la charte.

      Enfin, sa question ne concernait pas la résolution de l'énoncé, mais le fait que son code n'y répond pas....
      0
    2. @Utilisateur anonyme"Tu crois vraiment qu'une table de hachage soit à son niveau? S'il donne ça à son prof, il va se faire saquer "
      Non, et oui. Mais après tout je ne fait pas ses devoirs donc je m'en fou, ce serait contraire à la charte
      0
  6. OK,

    mais à réduire ou pas ce code n'est qu'une suite de définitions de fonctions

    jamais appelées, donc à l'exécution il ne se passe rien ...
    0
    1. Tu peux réduire tout ton programme en une dizaine de ligne en utilisant une simple table de hashage.
      0
      1. Bonjour Eleve,

        Alors, tu vois le problème ou pas ?
        0
        1. Bonjour Eleve,

          Ben non, ca ne va pas
          Visuellement, ça doit ressembler à ceci :

          def test():
              print('test')
          
          test()
          


          Sinon, il n'y a que des définitions de fonctions dans ton code
          Elles ne sont jamais appelées
          Donc ,à l'exécution, il ne se passe rien ...
          0
          1. Désolée, je n'avais pas compris. J'espère que cela fonctionne à présent.

            def (texte):
            if len(texte) <= 0:
            print("Le texte doit comporter au moins 1 lettre.")
            alphabet = "abcdefghijklmnopqrstuvwxyz"
            if texte in alphabet:
            texte = texte.lower()
            texte_propre = texte.replace(" ","")
            return texte_propre

            def comptage(nb_lettre):
            nb_lettre = [0]*26
            for lettre in texte_propre:
            position = alphabet.index(lettre)
            nb_lettre[position] = nb_lettre[position] + 1
            return nb_lettre[position]

            def frequence(lettre_dans_texte):
            """calcule la frequence d'apparition des lettres dans le texte"""
            lettre_dans_texte = len(texte)
            nb_lettre[alphabet.index(i)] = (nb_lettre / lettre_dans_texte * 100)
            frequence = nb_lettre[alphabet.index(i)]
            return frequence

            def affichage(menu):
            menu = ("Bonjour ")

            def main():
            texte = affichage(menu)
            texte = formatage(texte)
            texte =
            0
            1. Je ne pense pas pouvoir les utiliser. Mon programme en haut ne fonctionne pas du tout car il manque plein d'informations ou j'ai mal formulé des lignes mais je ne sais pas comment résoudre cela car j'ai aucune idée de où se trouvent mes erreurs.
              0
              1. Bonjour

                les balises de code ça sert à faire en sorte que l'indentation soit conservée quand tu postes sur le forum.
                Si tu ne les utilises pas, ton code est illisible et tu n'obtiens pas d'aide.

                Donc je pense que tu devrais lire le tuto que t'a donné yg_be et réfléchir à cette phrase
                Je ne pense pas pouvoir les utiliser
                0