Кодинг-марафон. Задача 6.
В БД некоего предприятия номера телефонов хранятся как попало и вам поручили написать функцию, которая приведёт их все к одному формату.
Функция должна называться format_numbers
, она принимает на вход строку (исходный номер) и возвращает строку (номер в нужном формате).
Сигнатура def format_numbers(phone_number: str) -> str:
Особенности номеров в БД:
- помимо цифр может содержать дефисы
-
, пробелы, скобки и знак+
(но+
только первым символом) - номер всегда валиден (содержит 11 цифр)
- номер всегда начинается с 8 или +7, причем
+
может быть только в начале номера - не может быть 2 идущих подряд дефисов, скобок или пробелов
Необходимо, чтобы на выходе любой номер стал такого формата: +7(909)101-10-10
Примеры
format_numbers('+79091011010') == '+7(909)101-10-10' format_numbers('8(909)1011010') == '+7(909)101-10-10' format_numbers('+7 909 101-10-10') == '+7(909)101-10-10'
Варианты решений
def format_numbers(phone_number: str) -> str: return '+7({0}{1}{2}){3}{4}{5}-{6}{7}-{8}{9}'.format(*[i for i in phone_number if i.isdigit()][1:])
def format_numbers(phone_number: str) -> str: numbers = list(filter(str.isdigit, phone_number))[1:] return "+7({}{}{}){}{}{}-{}{}-{}{}".format(*numbers)