Накопитель для текста
При сборке новой строки можно начать с пустого значения и добавлять только выбранные символы. Пустая строка — нейтральный элемент конкатенации: "" + "abc" даёт "abc".
Задание источника
Удалите из телефонной строки обычные пробелы, круглые скобки и дефисы:
def sanitize_phone_number(phone: str) -> str:
i = 0
result = ""
while i < len(phone):
char = phone[i]
if char not in " ()-":
result += char
i += 1
return result
Проверка
Учебная строка "+7 (999) 123-45-67" превращается в "+79991234567". "8 800 555 35 35" — в "88005553535", "(123) 456-7890" — в "1234567890".
Символ плюс не включён в исключаемый набор и остаётся. Порядок всех сохранённых символов также не меняется.
Точное множество исключений
Решение убирает четыре вида символов, перечисленных в строке " ()-". Оно не удаляет автоматически табуляцию, неразрывный пробел, длинное тире или буквы. Например, буквенный фрагмент останется в результате, хотя полноценный валидатор номера мог бы отклонить такой ввод.
Не проверка номера
Функция нормализует только часть оформления. Она не определяет страну, длину, допустимость номера или возможность звонка. Удаление символов и содержательная валидация — разные этапы, которые не следует смешивать под одним обещанием «очистить всё».
Для больших строк многократная конкатенация может быть менее удобной, чем сборка частей с join. В начальном упражнении сохранён явный цикл, чтобы показать накопление результата и независимое движение индекса.
Hexlet / Code Basics и участники · Исходный урок и решение · GNU AGPL v3. Набор исключаемых символов сохранён точно.