TheAlgorithms-Python
65 строк · 2.0 Кб
1def get_word_pattern(word: str) -> str:2"""3Returns numerical pattern of character appearances in given word
4>>> get_word_pattern("")
5''
6>>> get_word_pattern(" ")
7'0'
8>>> get_word_pattern("pattern")
9'0.1.2.2.3.4.5'
10>>> get_word_pattern("word pattern")
11'0.1.2.3.4.5.6.7.7.8.2.9'
12>>> get_word_pattern("get word pattern")
13'0.1.2.3.4.5.6.7.3.8.9.2.2.1.6.10'
14>>> get_word_pattern()
15Traceback (most recent call last):
16...
17TypeError: get_word_pattern() missing 1 required positional argument: 'word'
18>>> get_word_pattern(1)
19Traceback (most recent call last):
20...
21AttributeError: 'int' object has no attribute 'upper'
22>>> get_word_pattern(1.1)
23Traceback (most recent call last):
24...
25AttributeError: 'float' object has no attribute 'upper'
26>>> get_word_pattern([])
27Traceback (most recent call last):
28...
29AttributeError: 'list' object has no attribute 'upper'
30"""
31word = word.upper()32next_num = 033letter_nums = {}34word_pattern = []35
36for letter in word:37if letter not in letter_nums:38letter_nums[letter] = str(next_num)39next_num += 140word_pattern.append(letter_nums[letter])41return ".".join(word_pattern)42
43
44if __name__ == "__main__":45import pprint46import time47
48start_time = time.time()49with open("dictionary.txt") as in_file:50word_list = in_file.read().splitlines()51
52all_patterns: dict = {}53for word in word_list:54pattern = get_word_pattern(word)55if pattern in all_patterns:56all_patterns[pattern].append(word)57else:58all_patterns[pattern] = [word]59
60with open("word_patterns.txt", "w") as out_file:61out_file.write(pprint.pformat(all_patterns))62
63total_time = round(time.time() - start_time, 2)64print(f"Done! {len(all_patterns):,} word patterns found in {total_time} seconds.")65# Done! 9,581 word patterns found in 0.58 seconds.66