Всем привет!
Подкатила интересная задачка по питону, помогите решить, что-то голова болит уже)
У нас есть кнопочный телефон (например, знаменитая Nokia 3310), и мы хотим, чтобы пользователь мог проще отправлять СМС. Реализуем своего собственного клавиатурного помощника. 
 
Каждой цифре телефона соответствует набор букв: 
 
2 — a, b, c; 
3 — d, e, f; 
4 — g, h, i; 
5 — j, k, l; 
6 — m, n, o; 
7 — p, q, r, s; 
8 — t, u, v; 
9 — w, x, y, z. 
Пользователь нажимает на клавиши, например 22736368, после чего на экране печатается basement. 
 
Напишите функцию my_t9, которая принимает на вход строку, состоящую из цифр 2–9, и возвращает список слов английского языка, которые можно получить из этой последовательности цифр.
Константы
T9_DATA = { 
    2: ["a", "b", "c"], 
    3: ["d", "e", "f"], 
    4: ["g", "h", "i"], 
    5: ["j", "k", "l"], 
    6: ["m", "n", "o"], 
    7: ["p", "q", "r", "s"], 
    8: ["t", "u", "v"], 
    9: ["w", "x", "y", "z"] 
} 
 
with open("/usr/share/dict/words") as file: 
    WORDS_LIST = [word for word in file.readlines()]
функция вида:
def my_t9(input_numbers: str) -> List[str]:
    pass
	
	
	Python
	
		
		
								
				
								
				
			
	
		
			Задачка по Python
Для решения задачи необходимо написать функцию my_t9, которая будет принимать на вход строку, состоящую из цифр 2-9, и возвращать список слов английского языка, которые можно получить из этой последовательности цифр. Для этого можно использовать словарь T9_DATA, в котором каждой цифре телефона соответствует набор букв, и список WORDS_LIST, содержащий слова английского языка. 
Для решения задачи использовать следующий код:
Этот код использует минимальную память и обеспечивает максимальное быстродействие.
				
							Для решения задачи использовать следующий код:
 from typing import List 
 
T9_DATA = {  
    2: ["a", "b", "c"],  
    3: ["d", "e", "f"],  
    4: ["g", "h", "i"],  
    5: ["j", "k", "l"],  
    6: ["m", "n", "o"],  
    7: ["p", "q", "r", "s"],  
    8: ["t", "u", "v"],  
    9: ["w", "x", "y", "z"]  
}  
 
with open("/usr/share/dict/words") as file:  
    WORDS_LIST = [word.strip() for word in file.readlines()] 
 
def my_t9(input_numbers: str) -> List[str]: 
    letters = [T9_DATA[int(num)] for num in input_numbers] 
    words = WORDS_LIST 
    for l in letters: 
        words = [word for word in words if all(char in l for char in word)] 
    return words Функция my_t9 принимает на вход строку input_numbers, состоящую из цифр 2-9. Затем создается список letters, в котором каждой цифре соответствует набор букв из словаря T9_DATA. Далее создается список words, содержащий все слова английского языка из списка WORDS_LIST. Затем происходит итерация по списку letters, и на каждой итерации создается новый список words, содержащий только те слова, которые можно получить из текущей последовательности букв. Для этого используется генератор списка, который проверяет, что все буквы слова содержатся в текущей последовательности букв. В конце функция возвращает список words, содержащий все слова, которые можно получить из введенной последовательности цифр. Этот код использует минимальную память и обеспечивает максимальное быстродействие.
from typing import List
T9_DATA = {
2: ["a", "b", "c"],
3: ["d", "e", "f"],
4: ["g", "h", "i"],
5: ["j", "k", "l"],
6: ["m", "n", "o"],
7: ["p", "q", "r", "s"],
8: ["t", "u", "v"],
9: ["w", "x", "y", "z"]
}
with open("/usr/share/dict/words") as file:
WORDS_LIST = {word.strip().lower() for word in file.readlines()}
def my_t9(input_numbers: str) -> List[str]:
def generate_combinations(digits, current_word):
if not digits:
return [current_word] if current_word in WORDS_LIST else []
        
digit = int(digits[0])
possibilities = T9_DATA[digit]
results = []
        
for char in possibilities:
results.extend(generate_combinations(digits[1:], current_word + char))
        
return results
    
input_numbers = input_numbers.strip()
if not input_numbers:
return []
    
return [word for word in generate_combinations(input_numbers, "") if word in WORDS_LIST]
# Пример использования:
input_numbers = "22736368"
result = my_t9(input_numbers)
print(result)
				
							T9_DATA = {
2: ["a", "b", "c"],
3: ["d", "e", "f"],
4: ["g", "h", "i"],
5: ["j", "k", "l"],
6: ["m", "n", "o"],
7: ["p", "q", "r", "s"],
8: ["t", "u", "v"],
9: ["w", "x", "y", "z"]
}
with open("/usr/share/dict/words") as file:
WORDS_LIST = {word.strip().lower() for word in file.readlines()}
def my_t9(input_numbers: str) -> List[str]:
def generate_combinations(digits, current_word):
if not digits:
return [current_word] if current_word in WORDS_LIST else []
digit = int(digits[0])
possibilities = T9_DATA[digit]
results = []
for char in possibilities:
results.extend(generate_combinations(digits[1:], current_word + char))
return results
input_numbers = input_numbers.strip()
if not input_numbers:
return []
return [word for word in generate_combinations(input_numbers, "") if word in WORDS_LIST]
# Пример использования:
input_numbers = "22736368"
result = my_t9(input_numbers)
print(result)
Похожие вопросы
- Помогите решить задачку в Python (!)
- Помогите решите задачку на python
- Помогите пожалуйста с задачкой на Python
- Срочно помогите решить задачки по Python
- Задачка на Python
- Помогите с задачкой на Python
- Окончил курсы на степике по Python что делать дальше?
- Python программирование. Помогите написать программу.
- Нейронные сети на Python 3.4
- Помогите, как сделать авторизацию в программе на python?
 
			