Перевод формул: математика → Python
Учебник записывает формулы иначе, чем Python. Разбираем правила перевода — и самые частые ошибки при этом переводе.
Формулы в учебниках математики записаны иначе, чем код Python — умножение часто вообще не пишут, степень поднимают над строкой, деление рисуют чертой. Переводить такие формулы в Python нужно осторожно.
Таблица перевода
| В математике | В Python | Частая ошибка |
|---|---|---|
2 * x | написать 2x — SyntaxError, умножение никогда не подразумевается | |
x ** 2 | написать x^2 — сработает, но даст совсем не то число! | |
(a + b) / c | написать a + b / c — разделится только b, не вся сумма | |
x ** 0.5 или math.sqrt(x) | забыть, что корень — это тоже степень (0.5) | |
math.pi * radius ** 2 | забыть импортировать math, или написать pi вместо math.pi | |
a * (b + c) | написать a(b + c) — Python решит, что a это функция, и попытается её вызвать | |
(a + b) / (c + d) | написать a + b / c + d — разделится только b на c |
^ иногда означает возведение в степень. В Python ^ — совсем другой оператор (побитовое исключающее ИЛИ, разберём его в главе про биты): 5 ^ 3 равно 6, а не 125. Для степени всегда используйте **.print(5 ** 3) # 125 — степень
print(5 ^ 3) # 6 — совсем другая операция!
От математики — через геометрию — к Python
Таблица показывает перевод построчно. Но у формулы есть третий, самый наглядный уровень — сама геометрическая фигура, которую формула описывает:
import math
radius = 5
ploshad = math.pi * radius ** 2
print(round(ploshad, 2)) # 78.54
** уже применяется только к radius, а не ко всему выражению math.pi * radius (умножение и степень — разные уровни приоритета, степень выше).Почему скобки вокруг суммы обязательны
Вернёмся к дроби и посмотрим на неё с трёх сторон: как формулу, как дерево вычислений и как код.
Дерево показывает то же самое, что и черта дроби: a + b —
единый блок, который целиком становится числителем. В Python черты нет, поэтому эту
группировку нужно обозначить явно — круглыми скобками:
a, b, c = 8, 4, 3
# ПРАВИЛЬНО — скобки воспроизводят черту дроби:
print((a + b) / c) # 4.0
# НЕПРАВИЛЬНО — без скобок делится только b:
print(a + b / c) # 9.333... — это a + (b / c), совсем другая формула!
Пример перевода: формула среднего
Формула среднего трёх чисел переводится в Python по тому же правилу — вся сумма должна попасть в скобки, прежде чем делить:
a, b, c = 4, 7, 9
srednee = (a + b + c) / 3
print(srednee) # 6.666...