alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def frequence(texte):
f=0
lettre_freq=''
L=[]
for lettre in alphabet:
L=[lettre for i in range(len(texte))if texte[i]==lettre]
if len(L)>f:
f=len(L)
lettre_freq=lettre
return lettre_freq,f
return L
Le programme ci-dessus recherche la lettre la plus fréquente dans un texte donné. Modifier ce programme de telle sorte qu'il renvoie les deux lettres les plus fréquentes dans un texte, ainsi que le nombre d'apparitions dans le texte.
Avez-vous une idée ? n'hésitez pas, plusieurs solutions/syntaxes sont sans doute possibles.
Bonjour
plusieurs solutions/syntaxes sont sans doute possibles.
déja dans le programme actuel : ce qui est écrit est un choix de la solution la moins compréhensible pour ce qu'il est sensé faire !
def frequence(texte):
f1=0
f2=0
lettre_freq1=''
lettre_freq2=''
L=[]
for lettre in alphabet:
L=[lettre for i in range(len(texte))if texte[i]==lettre]
if len(L)>f1:
f1=len(L)
lettre_freq1=lettre
elif len(L)>f2:
f2=len(L)
lettre_freq2=lettre
return lettre_freq1,f1,lettre_freq2,f2
J'ai testé ça, mais le programme ne fonctionne pas à tous les coups.
déja, plutot que ce "bazar" moi j'utiliserais la fonction native de Python :
texte.count(lettre)
pour trouver la fréquence de la lettre lettre dans le texte texte.
texte="maitre corbeau sur un arbre perche tenait en son bec un fromage"
alphabet="abcdefghijklmnopqrstuvwxyz"
nb1=0
lettre1 = ''
nb2=0
lettre2 = ''
for lettre in alphabet :
c=texte.count(lettre)
if c>nb1 :
lettre1=lettre
nb1= c
elif c>nb2 :
lettre2=lettre
nb2=c
nb=len(texte)
print(lettre1,":",nb1,"fois, fréquence =",nb1/nb)
print(lettre2,":",nb2,"fois, fréquence =",nb2/nb)
D'accord, merci pour l'aide apportée ^^
En effet, les énoncés de livres laissent parfois à désirer, c'est beaucoup plus clair ainsi...
erratum, cette fonction donne le même résultat que la mienne éditée précédemment, elle ne fonctionne pas à tous les coups, en effet, dans le texte suivant : NJQT EXTC UXRBUXK RX VXNNLDX R XNQ HTX QT RBYYLJN OJXY SXN VLQGXVLQJHTXN
La fonction renvoie : "X : 12 fois, fréquence = 0.16666666666666666
Q : 5 fois, fréquence = 0.06944444444444445"
Or, si on compte il y'a 7 fois la lettre N, c'est donc plus de fois que la lettre Q pourtant c'est Q qui est renvoyée comme lettre la plus fréquente derrière X.
C'est bon, je viens de trouver la solution : texte="NJQT EXTC UXRBUXK RX VXNNLDX R XNQ HTX QT RBYYLJN OJXY SXN VLQGXVLQJHTXN"
alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
nb1=0
lettre1 = ''
nb2=0
lettre2 = ''
for lettre in alphabet :
c=texte.count(lettre)
if c>nb1 :
lettre1=lettre
nb1= c
nb=len(texte)
print(lettre1,":",nb1,"fois, fréquence =",nb1/nb)
for char in lettre1:
texte=texte.replace(char,'')
for lettre in alphabet :
c=texte.count(lettre)
if c>nb2 :
lettre2=lettre
nb2= c
print(lettre2,":",nb2,"fois, fréquence =",nb2/nb)
certes, mais là on balaye deux fois
l'idéal serait de ne balayer qu'une fois :
texte="NJQT EXTC UXRBUXK RX VXNNLDX R XNQ HTX QT RBYYLJN OJXY SXN VLQGXVLQJHTXN"
alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
nb1=0
lettre1 = ''
nb2=0
lettre2 = ''
for lettre in alphabet :
c=texte.count(lettre)
if c>nb1 :
lettre2=lettre1
nb2=nb1
lettre1=lettre
nb1= c
elif c>nb2 :
lettre2=lettre
nb2=c
nb=len(texte)
print(lettre1,":",nb1,"fois, fréquence =",nb1/nb)
print(lettre2,":",nb2,"fois, fréquence =",nb2/nb)
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :