Арифметика
В прошлых темах мы складывали, вычитали и умножали. Теперь разберём деление — оно в программировании бывает трёх видов — и другие полезные операции.
Три вида деления
print(17 / 5) # 3.4 — обычное деление
print(17 // 5) # 3 — целая часть (неполное частное)
print(17 % 5) # 2 — остаток от деления
/— обычное деление. Результат всегда дробный (float): даже10 / 2даёт5.0.//— целочисленное деление: сколько раз делитель целиком помещается в делимое.%— остаток: что осталось после целочисленного деления.
Они связаны: a == (a // b) * b + a % b. Для 17 и 5: 3 * 5 + 2 = 17.
Пример: яйца в коробках
В коробку помещается 12 яиц. Сколько полных коробок получится из 100 яиц и сколько яиц останется?
eggs = 100
print(eggs // 12) # 8 полных коробок
print(eggs % 12) # 4 яйца осталось
Пример: дни и недели
days = 45
weeks = days // 7 # 6
rest = days % 7 # 3
print(weeks, rest) # 6 3
Цифры числа
Остаток от деления на 10 — последняя цифра, а целочисленное деление на 10 отбрасывает последнюю цифру:
n = 4096
print(n % 10) # 6 — последняя цифра
print(n // 10) # 409 — число без последней цифры
print(n % 100) # 96 — две последние цифры
Комбинируя // и %, можно добраться до любой цифры. Попробуй сам получить из 4096 цифру 0.
Чётность
Число чётное, если остаток от деления на 2 равен нулю: n % 2 даёт 0 для чётных и 1 для нечётных. Это пригодится в теме про условия.
Отрицательные числа
// округляет вниз (к минус бесконечности), а не к нулю: -7 // 2 это -4, а -7 % 2 это 1. В большинстве задач числа положительные, но помни об этом.
Дробные числа
Числа с точкой — float: 3.14, 0.5, 2.0. Деление / всегда даёт float.
price = 250
people = 3
print(price / people) # 83.33333333333333
У дробных чисел ограниченная точность: 0.1 + 0.2 даёт 0.30000000000000004. Поэтому в задачах с дробным ответом обычно пишут «ответ засчитывается с погрешностью 10-6» — небольшие расхождения в последних знаках не важны.
Округление:
print(round(3.7)) # 4
print(round(3.14159, 2)) # 3.14 — до двух знаков
print(int(3.99)) # 3 — int() отбрасывает дробную часть
Степень и модуль
print(3 ** 4) # 81 — степень
print(2 ** 0.5) # 1.4142135623730951 — корень через степень
print(abs(-12)) # 12 — модуль (расстояние до нуля)
print(abs(5 - 9)) # 4 — расстояние между числами
Модуль math
Для математических функций есть встроенная библиотека math. Её подключают командой import в начале программы:
import math
print(math.sqrt(16)) # 4.0 — квадратный корень
print(math.pi) # 3.141592653589793
print(math.floor(4.7)) # 4 — округление вниз
print(math.ceil(4.2)) # 5 — округление вверх
math.ceil удобна для округления вверх, но с огромными числами через деление / можно потерять точность: float хранит примерно 15–16 значащих цифр. Если числа в задаче большие и целые, старайся обходиться целочисленными операциями // и %.
Порядок действий
- скобки;
**;*,/,//,%— слева направо;+,-— слева направо.
print(2 + 3 * 2 ** 2) # 14: сначала 2**2=4, потом 3*4=12, потом 2+12
print(20 // 3 % 4) # 2: 20//3=6, потом 6%4=2
Если сомневаешься — ставь скобки, они делают код понятнее.
Итог
/— дробное деление,//— целая часть,%— остаток;n % 10— последняя цифра,n // 10— число без неё;**— степень,abs— модуль,round— округление;import mathоткрываетsqrt,floor,ceil,pi;- для больших целых чисел пользуйся
//и%, а неfloat.