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'Подсказки
- Итоговый результат - строка.
- Используйте пустую строку как начальное значение.
Полезное
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
