Fréquence d'apparition france ioi
Résolu
Ak_j
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis bloqué à un exercice et je pense que je n'ai pas bien compris l'énoncé .
Voici l'énoncé,
Une seule ligne de texte, ne contenant pas de lettres accentuées, mais pouvant contenir des signes de ponctuation ou des chiffres.
Sortie
Pour chacune des lettres de l’alphabet, il faut afficher, sur une ligne, sa fréquence d’apparition dans le texte définie comme le nombre de fois où la lettre est présente, divisé par le nombre total de lettres du texte (et pas le nombre total de caractères).
et un exemple ,
Entrée : Le francais est une langue romane, de la famille des langues indo-europeennes.
Sortie :
0.109375
0.000000
0.015625
0.046875
0.203125
0.031250
0.031250
0.000000
0.046875
0.000000
0.000000
0.093750
0.031250
0.125000
0.046875
0.015625
0.000000
0.046875
0.078125
0.015625
0.062500
0.000000
0.000000
0.000000
0.000000
0.000000
Voici mon programme:
je vous remercie d'avance .
Cordialement,
Ak_j
Configuration: Windows / Chrome 102.0.0.0
je suis bloqué à un exercice et je pense que je n'ai pas bien compris l'énoncé .
Voici l'énoncé,
Une seule ligne de texte, ne contenant pas de lettres accentuées, mais pouvant contenir des signes de ponctuation ou des chiffres.
Sortie
Pour chacune des lettres de l’alphabet, il faut afficher, sur une ligne, sa fréquence d’apparition dans le texte définie comme le nombre de fois où la lettre est présente, divisé par le nombre total de lettres du texte (et pas le nombre total de caractères).
et un exemple ,
Entrée : Le francais est une langue romane, de la famille des langues indo-europeennes.
Sortie :
0.109375
0.000000
0.015625
0.046875
0.203125
0.031250
0.031250
0.000000
0.046875
0.000000
0.000000
0.093750
0.031250
0.125000
0.046875
0.015625
0.000000
0.046875
0.078125
0.015625
0.062500
0.000000
0.000000
0.000000
0.000000
0.000000
Voici mon programme:
def nombre_total_lettre(texte:str)-> int: """ renvoie le nombre total de lettres du texte >>> nombre_total_lettre('francais') 8 """ compteur = 0 for lettre in texte: lettre = lettre.upper() if 'A'<= lettre <='Z': compteur += 1 return compteur def nombre_apparition_lettre(element:str,texte:str)->int: """ renvoie le nombre de fois où la lettre est présente >>> nombre_apparition_lettre('l','Le francais est une langue') 2 """ compter_lettre = texte.count(lettre) return compter_lettre texte = input() total_lettre = nombre_total_lettre(texte) for lettre in texte : if 'A'<= lettre <='Z': apparition_lettre = nombre_apparition_lettre(lettre,texte) frequence = apparition_lettre/total_lettre print(frequence) # il m'affiche qu'un seul resultat 0.015625
je vous remercie d'avance .
Cordialement,
Ak_j
Configuration: Windows / Chrome 102.0.0.0
A voir également:
- Correction france ioi
- Banque de france - Guide
- Prefixe france - Guide
- Activer correction automatique android - Guide
- Le correcteur automatique de votre smartphone vous rend fou ? Voici comment le désactiver - Accueil - Mobile
- Autoroute la plus chère de france - Guide
7 réponses
Bonjour,
Pour compter le nb d'apparitions d'une lettre donnée, tu peux utiliser la méthode count():
Pour compter le nb d'apparitions d'une lettre donnée, tu peux utiliser la méthode count():
f = texte.count('a')
Qu'entends-tu, en fait, par:
divisé par le nombre total de lettres du texte (et pas le nombre total de caractères).
C'est ça que tu veux ? (à la louche ...) :
divisé par le nombre total de lettres du texte (et pas le nombre total de caractères).
C'est ça que tu veux ? (à la louche ...) :
import string texte = 'Le francais est une langue romane, de la famille des langues indo-europeennes.' texte = texte.lower() L, C = [], [] for lettre in texte: if(lettre not in string.punctuation and lettre not in string.whitespace and lettre not in L): L.append(lettre) C.append(texte.count(lettre)) for k in range(len(L)): print(L[k], C[k]/len(L))
Ok, je vais utiliser count , pour moi le nombre total de lettres, ce seraient simplement les lettres de l'alphabet sans compter les ponctuations ou autre par contre tu pourrais m'expliquer ton code à partie de la ligne 5 s'il te plaît je n'ai pas tout compris.
Bonsoir
ligne 7 : boucle sur chaque caractère du texte
ligne 8 : si le caractère n'est ni un signe de ponctuation, ni un espace et s'il n'est pas déjà dans la liste L :
ligne 9 : on ajoute ce caractère dans L
ligne 10 : on ajoute le nombre d'apparitions de ce caractère dans C
ligne 12 : boucle sur la liste L:
on affiche le caractère et sa quantité divisée par la longueur de L (donc du nb total de lettres, sans les ponctuations puisqu'on les a évitées ligne 8)
ligne 7 : boucle sur chaque caractère du texte
ligne 8 : si le caractère n'est ni un signe de ponctuation, ni un espace et s'il n'est pas déjà dans la liste L :
ligne 9 : on ajoute ce caractère dans L
ligne 10 : on ajoute le nombre d'apparitions de ce caractère dans C
ligne 12 : boucle sur la liste L:
on affiche le caractère et sa quantité divisée par la longueur de L (donc du nb total de lettres, sans les ponctuations puisqu'on les a évitées ligne 8)
Bonjour Phil.
Je pense que ton code est trop optimisé.
Il s'agit d'un exercice France ioi et Ak_j nous présente un code sans listes, ni méthodes de la classe string.
Donc il n'en est pas encore au niveau de ton code.
Je ne sais pas comment marche France ioi, mais si moi j'étais prof, que je donnais cet exercice à Ak_j aujourd'hui et qu'il me fournisse ta réponse, je lui compterais faux. Parce que d'une part, le code nous pourrait pas être de lui et d'autre part le but est qu'il appréhende l'algo de base.
Je pense que ton code est trop optimisé.
Il s'agit d'un exercice France ioi et Ak_j nous présente un code sans listes, ni méthodes de la classe string.
Donc il n'en est pas encore au niveau de ton code.
Je ne sais pas comment marche France ioi, mais si moi j'étais prof, que je donnais cet exercice à Ak_j aujourd'hui et qu'il me fournisse ta réponse, je lui compterais faux. Parce que d'une part, le code nous pourrait pas être de lui et d'autre part le but est qu'il appréhende l'algo de base.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ak_j que tu n'ais pas encore le niveau de Phil n'est pas grave, ça viendra et je ne l'ai pas non plus ;)
En reprenant le code que tu as posté dans ta question.
Pour comprendre ce qui se passe, il faut ajouter des print de debuggoage (que tu enlèveras du code final si tu veux).
Ensuite, tu analyses ce qui s'affiche et si tu ne comprends pas reviens ici en décrivant ce qui s'affiche et ce que tu en comprends.
En reprenant le code que tu as posté dans ta question.
Pour comprendre ce qui se passe, il faut ajouter des print de debuggoage (que tu enlèveras du code final si tu veux).
total_lettre = nombre_total_lettre(texte) print("nombre de lettres:", total_lettre) for lettre in texte : print("caractère :'",lettre,"'") if 'A'<= lettre <='Z': print("ce caractère est une lettre") apparition_lettre = nombre_apparition_lettre(lettre,texte) print("nombre d'apparitions :", apparition_lettre) frequence = apparition_lettre/total_lettre print(frequence)
Ensuite, tu analyses ce qui s'affiche et si tu ne comprends pas reviens ici en décrivant ce qui s'affiche et ce que tu en comprends.
Whismeril ne martyrise pas trop Phil_1857, il m'aide plusieurs fois puis j'ai pu trouver et en plus j'ai compris tout seul merci beaucoup :)
Bonjour
je n'espère pas l'avoir martyrisé, d'autant que je connais ses qualités indéniables.
Mais parfois, nous avons tous le défaut de proposer une solution qui nous semble évidente mais n'est pas encore connue du demandeur.
Même à titre personnel, je ne compte plus le nombre de fois où face à un exercice de Maths de mes enfants, ma première question était "tu connais la règle de 3? Non toujours pas... Bon va falloir réfléchir autrement"....
Parce que c'est là tout le sujet, quand on maitrise l'outil qui fait le truc facilement, on en oublie presque d'où vient cet outil et comment faire sans.
Ton programme était quasiment bon, la seule erreur était de ne sélectionner que des majuscules, donc seul le "L" était pris en compte.
C'est pourquoi, il m'a semblé plus instructif pour toi de voir afficher ce qui se passe.
D'abord tu as pu mener ta propre réflexion et on retient mieux ce que l'on a compris par soi même et d'autre part de voir qu'en informatique un "a" n'est pas un "A".
PS Imagine le fou rire le jour où mon ainé est rentré à la maison en me disant "ça y est j'ai appris la règle de 3, ça va être plus facile pour toi de m'expliquer les exercices que je ne comprends pas"
je n'espère pas l'avoir martyrisé, d'autant que je connais ses qualités indéniables.
Mais parfois, nous avons tous le défaut de proposer une solution qui nous semble évidente mais n'est pas encore connue du demandeur.
Même à titre personnel, je ne compte plus le nombre de fois où face à un exercice de Maths de mes enfants, ma première question était "tu connais la règle de 3? Non toujours pas... Bon va falloir réfléchir autrement"....
Parce que c'est là tout le sujet, quand on maitrise l'outil qui fait le truc facilement, on en oublie presque d'où vient cet outil et comment faire sans.
Ton programme était quasiment bon, la seule erreur était de ne sélectionner que des majuscules, donc seul le "L" était pris en compte.
C'est pourquoi, il m'a semblé plus instructif pour toi de voir afficher ce qui se passe.
D'abord tu as pu mener ta propre réflexion et on retient mieux ce que l'on a compris par soi même et d'autre part de voir qu'en informatique un "a" n'est pas un "A".
PS Imagine le fou rire le jour où mon ainé est rentré à la maison en me disant "ça y est j'ai appris la règle de 3, ça va être plus facile pour toi de m'expliquer les exercices que je ne comprends pas"