Проверьте удаление только первого префикса, отсутствие совпадения, пустые строки и полное совпадение. Текущий код удаляет лишние вхождения и иногда возвращает None.
Создать тест для функции, удаляющей начальную подстроку
Проверьте удаление только первого префикса, отсутствие совпадения, пустые строки и полное совпадение. Текущий код удаляет лишние вхождения и иногда возвращает None.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Имеется функция dif_str(source: str, prefix: str) → str, которая удаляет строку prefix из начала строки source, если source действительно начинается с prefix.
def dif_str(source: str, prefix: str) -> str:
if source.startswith(prefix):
return source.replace(prefix, '')
Ответ
Проверьте удаление только первого префикса, отсутствие совпадения, пустые строки и полное совпадение. Текущий код удаляет лишние вхождения и иногда возвращает None.
import pytest
@pytest.mark.parametrize('source,prefix,expected', [
('hello', 'he', 'llo'),
('ababx', 'ab', 'abx'),
('hello', 'x', 'hello'),
('hello', '', 'hello'),
('abc', 'abc', ''),
('', 'a', ''),
('', '', ''),
])
def test_dif_str(source, prefix, expected):
assert dif_str(source, prefix) == expected
Тесты выявляют две ошибки: replace(prefix, '') удаляет все вхождения, а при отсутствии префикса нет return.
def dif_str(source, prefix):
return source[len(prefix):] if source.startswith(prefix) else source
Срез соответствует заявленному контракту и корректно обрабатывает пустой префикс.