Logo
Книга для начинающих
ВходРегистрация
/
Программирование
/
Курс Python
/

Агрегация данных (Строки)

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: Агрегация данных (Строки)

Агрегация строк объединяет задачи, в которых заранее неизвестно, что содержат строки и какой у них размер.

Представим функцию, которая повторяет строку указанное количество раз. Да, в 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

waiting_clock
← ПредыдущийСледующий →