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. 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
  2. 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. 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. Bonjour Eleve,

        Alors, tu vois le problème ou pas ?
        0
        1. Tu peux réduire tout ton programme en une dizaine de ligne en utilisant une simple table de hashage.
          0
          1. 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. 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
            2. 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
            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. 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
            5. 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