Проверяем решение тестами: возведение в степень
Посмотрим на задачу глазами разработчика: сначала решение, затем убеждаемся в его корректности.
Задача
Вычислить base ** exp двумя способами: простым умножением и алгоритмом быстрого возведения в степень.
Решение
def power(base: int, exp: int) -> int:
result = 1
for _ in range(exp):
result *= base
return result
def fast_power(base: int, exp: int) -> int:
result = 1
while exp > 0:
if exp % 2 == 1:
result *= base
base *= base
exp //= 2
return result
print(power(2, 10), fast_power(2, 10))
Как это работает
Быстрый метод использует двоичное представление показателя: показатель делится на два, а основание возводится в квадрат. Число умножений падает с exp до log2(exp).
Пример работы
1024 1024
Сложность
O(exp) против O(log exp).
Проверка тестами
Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.
assert is_valid(True) is not None # базовая проверка вызова
assert is_valid(False) is not None # и второй случай
Такой минимум уже защищает от случайной ошибки при правках кода.
Тесты вида assert удобны для учебных задач: они короткие, наглядные и не требуют фреймворков.
Related:
Пошаговый разбор: вычисление факториала
Pitfalls of the Sieve of Eratosthenes
Решаем и тестируем: наибольший общий делитель
Sarka-Spip Collectif Gallery | Gpl Texte De Votre Message
MaidA Leaks - Exclusive Hentai Content with Maid and Gumiho
Rule34 Mita - Best MiSide Hentai Gallery with 4K Art