Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
53 changes: 53 additions & 0 deletions 04_lesson/string_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
class StringUtils:
"""
Класс с полезными утилитами для обработки и анализа строк
"""

def capitalize(self, string: str) -> str:
"""
Принимает на вход текст, делает первую букву заглавной
и возвращает этот же текст
Пример: `capitilize("skypro") -> "Skypro"`
"""
return string.capitalize()

def trim(self, string: str) -> str:
"""
Принимает на вход текст и удаляет пробелы в начале, если они есть
Пример: `trim(" skypro") -> "skypro"`
"""
whitespace = " "
while string.startswith(whitespace):
string = string.removeprefix(whitespace)
return string

def contains(self, string: str, symbol: str) -> bool:
"""
Возвращает `True`, если строка содержит искомый символ
и `False` - если нет
Параметры:
`string` - строка для обработки
`symbol` - искомый символ
Пример 1: `contains("SkyPro", "S") -> True`
Пример 2: `contains("SkyPro", "U") -> False`
"""
res = False
try:
res = string.index(symbol) > -1
except ValueError:
pass

return res

def delete_symbol(self, string: str, symbol: str) -> str:
"""
Удаляет все подстроки из переданной строки
Параметры:
`string` - строка для обработки
`symbol` - искомый символ для удаления
Пример 1: `delete_symbol("SkyPro", "k") -> "SyPro"`
Пример 2: `delete_symbol("SkyPro", "Pro") -> "Sky"`
"""
if self.contains(string, symbol):
string = string.replace(symbol, "")
return string
84 changes: 84 additions & 0 deletions 04_lesson/test_string_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import pytest
from string_utils import StringUtils


string_utils = StringUtils()


@pytest.mark.positive
@pytest.mark.parametrize("input_str, expected", [
("skypro", "Skypro"),
("123", "123"),
("04 апреля 2023", "04 апреля 2023"),
])
def test_capitalize_positive(input_str, expected):
assert string_utils.capitalize(input_str) == expected


@pytest.mark.negative
@pytest.mark.parametrize("input_str, expected", [
("None", "None"),
("", ""),
(" ", " "),
])
def test_capitalize_negative(input_str, expected):
assert string_utils.capitalize(input_str) == expected


@pytest.mark.positive
@pytest.mark.parametrize("input_str, expected", [
("Skypro", "Skypro"),
("123", "123"),
(" 04 апреля 2023", "04 апреля 2023"),
])
def test_trim_positive(input_str, expected):
assert string_utils.trim(input_str) == expected


@pytest.mark.negative
@pytest.mark.parametrize("input_str, expected", [
("None", "None"),
("", ""),
(" Skypro", "Skypro"),
])
def test_trim_negative(input_str, expected):
assert string_utils.trim(input_str) == expected


@pytest.mark.positive
@pytest.mark.parametrize("input_str, symbol, expected", [
("Skypro", "S", True),
("123", "1", True),
("04 апреля 2023", "04", True),
])
def test_contains_positive(input_str, symbol, expected):
assert string_utils.contains(input_str, symbol) == expected


@pytest.mark.negative
@pytest.mark.parametrize("input_str, symbol, expected", [
("", "F", False),
(" ", "L", False),
])
def test_contains_negative(input_str, symbol, expected):
assert string_utils.contains(input_str, symbol) == expected


@pytest.mark.positive
@pytest.mark.parametrize("input_str, symbol, expected", [
("Skypro", "S", "kypro"),
("123", "1", "23"),
("04 апреля 2023", "0", "4 апреля 223"),
])
def test_delete_symbol_positive(input_str, symbol, expected):
assert string_utils.delete_symbol(input_str, symbol) == expected


@pytest.mark.negative
@pytest.mark.parametrize("input_str, symbol, expected", [
("None", "", "None"),
("", "N", ""),
(" ", "0"," "),
])
def test_delete_symbol_negative(input_str, symbol, expected):
assert string_utils.delete_symbol(input_str, symbol) == expected
4 changes: 4 additions & 0 deletions pytest.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[pytest]
markers =
positive: Тесты, которые проверяют корректное поведение функции
negative: Тесты, которые проверяют некорректное поведение функции