Глава 5 · Давайте поиграем с числами!
Степени и корни
Возведение в степень и извлечение корня — одна и та же геометрическая картинка, прочитанная в двух направлениях.
Теперь — операция, у которой самая красивая геометрическая картинка из всех: возведение в степень.
Квадрат числа — это площадь квадрата
x ** 2 — площадь квадрата со стороной x:
kvadrat.py
print(4 ** 2) # 16
print(4 ** 3) # 64 — куб: та же идея, но в трёх измерениях (объём)
Квадратный корень — обратная операция: от площади к стороне
Если известна площадь квадрата, можно найти длину его стороны — это и есть квадратный корень. Та же картинка, только читаем её в обратную сторону: у нас есть число 16 внутри квадрата, и мы ищем сторону.
koren.py
print(16 ** 0.5) # 4.0 — степень 0.5 и есть квадратный корень
import math
print(math.sqrt(16)) # 4.0 — то же самое, но явно и понятно для читателя
math.sqrt() читается лучше, чем ** 0.5
Оба варианта работают одинаково правильно, но
math.sqrt(16) сразу говорит читателю кода: «здесь ищут корень». 16 ** 0.5 заставляет вспоминать, что 0.5 — это корень.Три способа возвести в степень — и в чём разница
| Способ | Что возвращает | Пример |
|---|---|---|
** | int, если оба операнда int; иначе float | 2 ** 10 → 1024 |
pow(a, b) | то же самое, что a ** b | pow(2, 10) → 1024 |
math.pow(a, b) | всегда float, даже для целых чисел | math.pow(2, 10) → 1024.0 |
У pow() есть и третий, необязательный аргумент
pow(a, b, m) считает (a ** b) % m, но намного быстрее — для больших чисел это ускоряет работу в тысячи раз. Используется, например, в криптографии. Пока достаточно знать, что такая возможность существует.Практика: степени и корни
Тот же ноутбук, что закрепляет //, % и ** вместе — самое время попрактиковать все специальные операторы разом