Всем привет!
Подкатила интересная задачка по питону, помогите решить, что-то голова болит уже)
У нас есть кнопочный телефон (например, знаменитая 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?