Вычисления в python
Хорошего дня! Сегодня мы научимся умножать, делить, вычитать... В каком смысле ты это уже умеешь?! А ты в этом уверен? В любом случае, повторение - это мать учения, так что устраивайся по-удобнее, мы начинаем.
Арифметические операции в python
Вы считаете, что арифметические операции - это просто? Пересчитайте. На самом деле, всё не так страшно, но расслабляться не стоит.
Начнём со всем знакомой четверки:
print(10 + 10)
# 10
print(10 - 5)
# 5
print(11 * 7)
# 77
print(10 / 2)
# 5.0
Никаких неожиданностей, правда? Не совсем, посмотрите внимательно на операцию деления. Заметили? Мы разделили целое число на его делитель, но несмотря на это, результат имеет тип float. Взглянем на операцию деления чуть более пристально:
print(10 / 2)
# 5.0
print(100 / 3)
# 33.333333333333336
print(21 / 4)
# 5.25
print(23 / 7)
# 3.2857142857142856
Обратите внимание на деление 100 / 3. Выполнив эту операцию, мы получили очень интересный результат 33.333333333333336. На конце 6?! Вспомним перевод числа в двоичную систему счисления. То есть мы можем представить любое число в виде ноликов и единичек, например:
37 = 2^5 + 2^2 + 2^0 = 100101.
А как обстоит дело с дробями? Точно также:
0.75 = 0.5 + 0.25 = 1/2 + 1/4 = 0.11
Возникает вопрос, как перевести в двоичную систему такие дроби: 1/3
1/3 = 1/4 + 1/8 + 1/16 + 1/32 + ...
Это может продолжаться бесконечно долго. Поэтому python прерывает выполнение таких вычислений и часто выдает такие приколы:
print(0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1)
# 0.7999999999999999
print(0.1 + 0.2)
# 0.30000000000000004
print(7 / 3)
# 2.3333333333333335
Еще немного математики. Математика в каждый дом!
# Возведение в степень
print(10 ** 2)
# 100
print(2 ** 4)
# 16
print(3 ** 0.5)
# 1.7320508075688772
print(3 ** -2)
# 0.1111111111111111
# Остаток от деления
print(11 % 4)
# 3
print(101 % 7)
# 3
print(34 % 5)
# 4
# Деление нацело
print(20 // 4)
# 5
print(129 // 11)
# 11
print(100 // 61)
# 1
Операции сравнения в python
Операции сравнения в отличие от арифметические имеют всего два результата: True и False. Чаще всего такие операции используются в условии циклов, условных оператов, а также в некоторых функциях, например, filter.
# Операция равенства: True, если X равен Y
print(10 == 10)
# True
print(666 == 661)
# False
# Операция неравенства: True, если X не равен Y
print(666 != 661)
# True
print(666 != 666)
# False
# Операция больше: True, если X больше Y
print(120 > 2)
# True
print(1000 > 1999)
# False
# Операция меньше: True, если X меньше Y
print(121 < 120)
# False
print(0 < 1)
# True
# Операция меньше или равно: True, если X меньше или равен Y
print(6 <= 6)
# True
print(5 <= 2)
# False
# Операция больше или равно: True, если X больше или равен Y
print(1000 >= 10000)
# False
print(9999 >= 9999)
# False
Логические операции в python
Логические операции, как и операции сравнения, имеют всего два возможных результата: True и False. Используются для объединения операций сравнения в условиях циклов, условных оператов, а также в некоторых функциях, например, filter.
# Оператор "and" или конъюнкция.
# True, если и выражение X, и выражение Y равны True
print(10 == 10 and 10 > 2)
# True
print(666 == 661 and 9 > 0)
# False
# Оператор "or" или дизъюнкция.
# True, если или выражение X, или выражение Y равны True
print(666 == 661 or 9 > 0)
# True
print(666 == 661 or 9 < 0)
# False
# Оператор "not" или инверсия меняет значение на противоположное.
# True, если выражение X равно False
print(not 120 > 2)
# False
print(not 1000 < 999)
# True
print(not (121 < 121 and 10 == 2))
# True
Округление чисел в python
Всё дело в округлении! В python есть несколько замечательных функций, которые округляют число до указанного знака. Одной из таких функций является round:
pi = 3.14159265358979323846264338327
print(round(pi, 1))
# 3.1
print(round(pi, 2))
# 3.14
print(round(pi, 3))
# 3.12
print(round(pi, 4))
# 3.1416
print(round(pi, 10))
# 3.1415926536
print(round(pi, 15))
# 3.141592653589793
Рассмотрим любопытный пример:
print(round(2.5))
# 2
print(round(3.5))
# 4
Если на вашем лице застыл немой вопрос: "почему?", то я вас понимаю. В школе нас учили, что дроби 1.1, 1.2, 1.3, 1.4 округляются до единицы, а 1.5, ..., 1.9 до двойки. Но python думает по-другому. Есть два типа округления: арифметическое и банковское. Именно арифметическому округлению вас учили в школе. Python использует как раз-таки банковское округление, его еще называют округлением до ближайшего четного. Приведу еще несколько примеров:
print(round(10.51213))
# 11
print(round(23.5))
# 24
print(round(22.5))
# 22
Модуль math
Модуль math представляет собой набор математических формул. Рассмотрим несколько примеров:
import math
print(dir(math))
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos',
'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign',
'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs',
'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot',
'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log',
'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder',
'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
import math
# Синус 3.14 радиан
print(math.sin(3.14))
# 0.0015926529164868282
# Косинус 1.1 радиан
print(math.cos(1.1))
# 0.4535961214255773
# Возведение экспоненты в 3 степень
print(math.exp(3))
# 20.085536923187668
# Натуральный логарифм 61
print(math.log(61))
# 4.110873864173311
# Факториал четырех
print(math.factorial(4))
# 24
# Извлечение квадратного корня
print(math.sqrt(9))
# 3.0
# Алгоритм Евклида для чисел 20 и 19
print(math.gcd(20, 19))
# 1
# Вычисление гипотенузы треугольника с катетами 3 и 4
print(math.hypot(3,4))
# 5.0
# Перевод радиан в градусы
print(math.degrees(1.572))
# 90.06896539456541
# Факториал четырех
print(math.fmod(20, 3))
# 24
И это далеко не всё! Остальные функции я предлагаю вам протестировать самостоятельно : )