Telegram

Вычисле­ния в 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

И это далеко не всё! Остальные функции я предлагаю вам протестировать самостоятельно : )