Adding util methode for letter frequency

This commit is contained in:
Patrick Müller 2021-10-15 18:22:31 +02:00
parent f13b667e6c
commit d4bd9638a4
2 changed files with 51 additions and 0 deletions

View File

@ -2,7 +2,22 @@ LETTERS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
'W', 'X', 'Y', 'Z'] 'W', 'X', 'Y', 'Z']
def is_letter_of_alphabet(letter: str):
"""
Checks if the given letter is a valid letter of the alphabet
:param letter: The letter to check
:return: If the letter is in the alphabet
"""
return letter.upper() in LETTERS
def get_letter_at_index(idx: int, capital: bool = False): def get_letter_at_index(idx: int, capital: bool = False):
"""
Returns the letter at the given index
:param idx: The index of the letter to return
:param capital: If the capitalized letter should be returned
:return: The letter
"""
if idx < 0 or idx > 25: if idx < 0 or idx > 25:
raise AttributeError raise AttributeError
@ -10,6 +25,11 @@ def get_letter_at_index(idx: int, capital: bool = False):
def get_index_of_letter(letter: str): def get_index_of_letter(letter: str):
"""
Returns the index of the given letter
:param letter: The letter to return the index of
:return: The index of the letter
"""
if letter.upper() not in LETTERS: if letter.upper() not in LETTERS:
raise AttributeError raise AttributeError

31
utils/CipherUtils.py Normal file
View File

@ -0,0 +1,31 @@
import AlphabetUtils as au
def calculate_frequency(text: str, fancy_printing: bool = False):
"""
Calculates the frequency of every letter in the german alphabet for the given text
:param text: The text to calculate the letter frequency for
:return: A list of frequencies, where index 0 contains the frequency of a in percent and so on.
"""
occurrence_count = [0 for i in range(26)]
for char in text:
if au.is_letter_of_alphabet(char):
char_index = au.get_index_of_letter(char)
occurrence_count[char_index] += 1
occurrence_frequency = []
for count in occurrence_count:
occurrence_frequency.append(count / len(text))
if fancy_printing:
for i in range(26):
print(f'{au.get_letter_at_index(i, True)}: {occurrence_frequency[i] * 100}%')
return occurrence_frequency
if __name__ == '__main__':
print(
calculate_frequency('Hier den Text eingeben, für den die Wahrscheinlichkeiten berechnet werden sollen', True))