Вычисления в 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
И это далеко не всё! Остальные функции я предлагаю вам протестировать самостоятельно : )