</>
Тема 3 из 18

Арифметика

selfedu · Видео необязательно — всё нужное есть в тексте ниже.Открыть на YouTube ↗

В прошлых темах мы складывали, вычитали и умножали. Теперь разберём деление — оно в программировании бывает трёх видов — и другие полезные операции.

Три вида деления

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 значащих цифр. Если числа в задаче большие и целые, старайся обходиться целочисленными операциями // и %.

Порядок действий

  1. скобки;
  2. **;
  3. *, /, //, % — слева направо;
  4. +, - — слева направо.
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.