# Основной код программы
# Математические операции
def add(a, b):
"""Сложение двух чисел"""
return a + b
def divide(a, b):
"""Деление двух чисел"""
if b == 0:
raise ValueError("Деление на ноль невозможно")
return a / b
# Обработка строк
def reverse_string(s):
"""Переворот строки"""
return s[::-1]
def is_palindrome(s):
"""Проверка, является ли строка палиндромом"""
s = s.lower().replace(" ", "")
return s == s[::-1]
# Работа с массивами
def find_max(numbers):
"""Нахождение максимального значения в списке"""
if not numbers:
raise ValueError("Список пуст")
return max(numbers)
Тесты
# Тестирование функций
def test_add():
"""Тестируем функцию add"""
assert add(3, 2) == 5, "Сложение положительных чисел"
assert add(-1, 1) == 0, "Сложение отрицательного и положительного"
assert add(0, 0) == 0, "Сложение нулей"
def test_divide():
"""Тестируем функцию divide"""
assert divide(10, 2) == 5, "Обычное деление"
assert divide(-6, 2) == -3, "Деление отрицательного числа"
try:
divide(10, 0)
except ValueError:
pass # Ожидаем ошибку при делении на ноль
else:
assert False, "Деление на ноль не вызвало ошибку"
def test_reverse_string():
"""Тестируем функцию reverse_string"""
assert reverse_string("hello") == "olleh", "Переворот строки"
assert reverse_string("") == "", "Переворот пустой строки"
def test_is_palindrome():
"""Тестируем функцию is_palindrome"""
assert is_palindrome("level") is True, "Палиндром"
assert is_palindrome("hello") is False, "Не палиндром"
assert is_palindrome("A Santa at NASA") is True, "Палиндром с пробелами и регистрами"
def test_find_max():
"""Тестируем функцию find_max"""
assert find_max([1, 2, 3]) == 3, "Максимум из положительных чисел"
assert find_max([-1, -2, -3]) == -1, "Максимум из отрицательных чисел"
try:
find_max([])
except ValueError:
pass # Ожидаем ошибку при пустом списке
else:
assert False, "Пустой список не вызвал ошибку"
Запуск тестов
if __name__ == "__main__":
# Тестируем все функции
test_add()
test_divide()
test_reverse_string()
test_is_palindrome()
test_find_max()
print("Все тесты пройдены!")
Объяснение тестов
Математические операции
test_add проверяет корректность сложения для положительных, отрицательных и нулевых чисел.
test_divide проверяет деление на обычных числах и ожидает ошибку при делении на ноль.
Обработка строк
test_reverse_string проверяет, что строка переворачивается правильно, включая случай с пустой строкой.
test_is_palindrome проверяет строку на палиндром, учитывая регистр и пробелы.
Работа с массивами
test_find_max проверяет нахождение максимума в списке чисел, включая случай с отрицательными числами, и ожидает ошибку на пустом списке.