Python: Агрегация данных (Строки)
Агрегация строк объединяет задачи, в которых заранее неизвестно, что содержат строки и какой у них размер.
Представим функцию, которая повторяет строку указанное количество раз. Да, в Python для повтора встроен оператор умножения строки на число, но здесь мы посмотрим как он примерно реализован внутри:
repeat('hexlet', 3) # 'hexlethexlethexlet'Функция наращивает строку в цикле указанное количество раз:
def repeat(text: str, times: int) -> str:
# Нейтральный элемент для строк — пустая строка
result = ''
i = 1
while i <= times:
# Каждый раз добавляем строку к результату
result = result + text
i = i + 1
return resultРаспишем выполнение этого кода по шагам.
# Для вызова repeat('hexlet', 3)
result = ''
result = result + 'hexlet' # hexlet
result = result + 'hexlet' # hexlethexlet
result = result + 'hexlet' # hexlethexlethexletНаглядно процесс наращивания строки выглядит так.
repeat('hexlet', 3):
i=1: result = '' + 'hexlet' = 'hexlet'
i=2: result = 'hexlet' + 'hexlet' = 'hexlethexlet'
i=3: result = 'hexlethexlet' + 'hexlet' = 'hexlethexlethexlet'
└── результатНейтральный элемент
Чтобы наращивание работало, нужно стартовое значение. Для строк таким значением является пустая строка ''.
Она называется нейтральным элементом, потому что при конкатенации ничего не меняет:
print('' + 'abc') # => abc
print('abc' + '') # => abcПоэтому именно пустая строка всегда используется как начальное значение при агрегации строк.
Задание
Реализуйте функцию sanitize_phone_number(), которая принимает номер телефона из формы и возвращает строку без пробелов, скобок и дефисов.
Пользователи вводят номера по-разному, но перед сохранением их часто приводят к одному виду. Пройдите исходную строку посимвольно и соберите новый номер только из полезных символов.
sanitize_phone_number('+7 (999) 123-45-67') # '+79991234567'
sanitize_phone_number('8 800 555 35 35') # '88005553535'
sanitize_phone_number('(123) 456-7890') # '1234567890'Подсказки
- Итоговый результат - строка.
- Используйте пустую строку как начальное значение.
Полезное
Ваше упражнение проверяется по этим тестам
import solution
def test1():
assert solution.sanitize_phone_number("+7 (999) 123-45-67") == "+79991234567"
assert solution.sanitize_phone_number("8 800 555 35 35") == "88005553535"
assert solution.sanitize_phone_number("(123) 456-7890") == "1234567890"Решение учителя откроется через:
20:00
