Problème de programmation Python
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
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.
-
Contributeurbonjour,
peux-tu utiliser les balises de code, comme expliqué ici: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
ton programme est-il complet? fonctionne-t-il bien? -
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.
-
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 phraseJe ne pense pas pouvoir les utiliser
-
-
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 = -
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 ... -
Bonjour Eleve,
Alors, tu vois le problème ou pas ? -
Tu peux réduire tout ton programme en une dizaine de ligne en utilisant une simple table de hashage.
-
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 ... -
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-
-
@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
-
-
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 ...-
-
@Eleveok mais comme tu n'appelles jamais main, il ne se passe rien ....
-
-
Je ne sais pas comment faire du coup pour les "appeler"
-
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,...
-
-
@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' -
@EleveOK et quand tu lances ce code il fonctionne tel quel?
-
@Utilisateur anonymeoui il fonctionnait très bien
-
@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.
-
-
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 !-
-
@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é ... :-)
-