Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- Дан текст, который содержит различные английские буквы и знаки препинания. Вам необходимо найти самую частую букву в тексте. Результатом должна быть буква в нижнем регистре.
- При поиске самой частой буквы, регистр не имеет значения, так что при подсчете считайте, что "A" == "a". Убедитесь, что вы не считайте знаки препинания, цифры и пробелы, а только буквы.
- Если в тексте две и больше буквы с одинаковой частотой, тогда результатом будет буква, которая идет первой в алфавите. Для примера, "one" содержит "o", "n", "e" по одному разу, так что мы выбираем "e".
- """
- from functools import reduce
- import string
- def most_wanted_letter_v1(text):
- alphabet = [letter for letter in string.ascii_lowercase]
- text = text.lower()
- letters_count = [(letter, text.count(letter)) for letter in alphabet if letter in text]
- max_value = max(arg[1] for arg in letters_count)
- result = [arg[0] for arg in letters_count if arg[1] == max_value]
- return reduce(lambda x, y: x if alphabet.index(x) < alphabet.index(y) else y, result)
- def most_wanted_letter_v2(text):
- if not isinstance(text, str):
- raise TypeError('Wrong type of text. Expected a string.')
- if not text:
- return 'Letters not found.'
- def get_letter_counts(_text):
- counts = {}
- for word in _text.split(' '):
- for let in word.lower():
- if let.isalpha():
- try:
- counts[let] += 1
- except KeyError:
- counts[let] = 1
- if not counts:
- raise Exception('Text do not have any alphas')
- return counts
- def get_most_wanted_letters(letter_counts):
- sorted_counts = sorted(letter_counts.items(), key=lambda x: x[1])
- max_value = sorted_counts[-1][1]
- wanted_letters = (x[0] for x in sorted_counts if x[1] == max_value)
- return wanted_letters
- let_counts = get_letter_counts(text)
- most_wanted_letters = get_most_wanted_letters(let_counts)
- first_letter = min(most_wanted_letters, key=lambda x: ord(x))[0]
- return first_letter
- if __name__ == '__main__':
- #These "asserts" using only for self-checking and not necessary for auto-testing
- assert checkio("Hello World!") == "l", "Hello test"
- assert checkio("How do you do?") == "o", "O is most wanted"
- assert checkio("One") == "e", "All letter only once."
- assert checkio("Oops!") == "o", "Don't forget about lower case."
- assert checkio("AAaooo!!!!") == "a", "Only letters."
- assert checkio("abe") == "a", "The First."
- print("Start the long test")
- assert checkio("a" * 9000 + "b" * 1000) == "a", "Long."
- print("The local tests are done.")
Add Comment
Please, Sign In to add comment