# -*- coding:utf-8 -*- from string import ascii_uppercase from time import time __nom_fichier__ = "frequence" __author__ = "fay7 : Christine Fay-Varnier" __date__ = "décembre 2023" # calcul de frequences d'apparition des lettres dans un texte # version 1 # on compte les lettres une par une "a la main" # cette version est un tout petit peu moins efficace que la 2ème version def frequence(texte): """ @param texte: chaîne de caractères, texte quelconque @return: dictionnaire des fréquences tel que freq[c] = frequence d'apparitions de c dans texte """ # initialisation du dictionnaire des fréquences tfreq = {} for c in texte.upper(): # parcours du texte caractere par caractere # on ne travaille que sur les majuscules if c in tfreq: # si le caractere c est deja dans le dictionnaire # sa frequence augmente de 1 tfreq[c] += 1 else: # sinon on cree cette cle dans le dictionnaire # representant la table des frequences tfreq[c] = 1 return tfreq # version 2 # on utilise la methode count de python # cette methode est plus rapide que la precedente def frequence2(texte): """ @param texte: chaîne de caractères, texte quelconque @return: dictionnaire des fréquences tel que freq[c] = frequence d'apparitions de c dans texte """ # initialisation du dictionnaire des fréquences tfreq = {} texte = texte.upper() for c in texte: # parcours du texte caractère par caractère # on ne travaille que sur les majuscules if c not in tfreq: # si le caractere c n'a pas encore été rencontré, # on crée une entrée dans le dictionnaire et on compte combien de fois il apparaît tfreq[c] = texte.count(c) return tfreq # version 3 # on part des lettres de l'alphabet et on utilise count # la plus rapide des versions (presque 3 fois plus rapide que la 1ère et 2 fois que la seconde) def frequence3(texte): """ @param texte: chaîne de caractères, texte quelconque @return: dictionnaire des fréquences tel que freq[c] = frequence d'apparitions de c dans texte """ # initialisation du dictionnaire des fréquences tfreq = {lettre : 0 for lettre in ascii_uppercase} texte = texte.upper() for lettre in tfreq: # on compte le nombre d'apparition de chaque lettre dans le texte tfreq[lettre] = texte.count(lettre) return tfreq if __name__ == '__main__': # **** # message = input('chaine : ') message = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum imperdiet, leo malesuada posuere posuere, \ erat diam consequat risus, eget tincidunt magna quam dictum eros. Sed congue quis sapien non fringilla. \ Vestibulum felis eros, viverra ut elit at, rutrum sollicitudin justo. Mauris tincidunt tortor blandit dictum \ molestie. Phasellus iaculis bibendum arcu. Nam ultricies imperdiet sollicitudin. \ Quisque sit amet molestie elit. Nunc et commodo enim. Nullam efficitur id orci ut auctor. \ Pellentesque malesuada, purus eu euismod sodales, erat purus aliquet nisi, non venenatis dolor augue vitae lorem. \ Pellentesque vehicula erat vitae nulla tincidunt congue. Vivamus et imperdiet nisi, id lobortis sem. \ Nullam sit amet convallis est. Nullam consectetur molestie nunc sed gravida. Suspendisse fringilla, \ erat in ultricies blandit, ipsum libero egestas eros, nec pulvinar nisl diam id odio. \ Aliquam massa eros, tempor a lorem quis, ullamcorper dictum mauris. Duis mauris metus, tincidunt in orci in, \ facilisis tristique justo. Sed sit amet eros scelerisque, mollis metus et, vestibulum magna. \ Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. \ Etiam non dolor sollicitudin ante aliquam dignissim. Sed luctus purus a vehicula varius. \ Proin non tellus felis. Nullam ut cursus odio. Aliquam egestas ante odio, eu efficitur purus pellentesque eget." table_frequence = frequence(message) print(table_frequence) table_frequence = frequence2(message) print(table_frequence) table_frequence = frequence3(message) print(table_frequence) # TEST Efficacité des versions # test avec la version 1 print() debut = time() for i in range(1000): table_frequence = frequence(message) fin = time() print((fin-debut)*100) # test avec la version 2 debut = time() for i in range(1000): table_frequence = frequence2(message) fin = time() print((fin-debut)*100) # test avec la version 3 debut = time() for i in range(1000): table_frequence = frequence3(message) fin = time() print((fin-debut)*100) # CONCLCUSION # LA version 3 est bien plus rapide que la version 2 qui est plus rapide que la version 1