Степени, целочисленное деление и остаток в Python
Обновлено:
На этом уроке изучаем три новых математических оператора:
**
//
%
** — возведение в степень.
// — целочисленное деление.
% — остаток от деления.
Ранее мы уже изучили:
+
-
*
/
1. Возведение в степень
Для возведения числа в степень используется оператор **.
Пример:
5 ** 2
Результат:
25
Эта запись означает:
5 * 5
Число 5 возводится во вторую степень.
Вторую степень также называют квадратом числа.
2. Третья степень
Пример:
5 ** 3
Результат:
125
Эта запись означает:
5 * 5 * 5
Число 5 умножается само на себя три раза.
Третью степень также называют кубом числа.
3. Четвёртая степень
Пример:
5 ** 4
Результат:
625
Эта запись означает:
5 * 5 * 5 * 5
Число 5 умножается само на себя четыре раза.
4. Возведение других чисел в степень
В степень можно возводить разные числа.
2 ** 3
Результат:
8
Потому что:
2 * 2 * 2
Результат:
8
Ещё пример:
10 ** 4
Результат:
10000
Потому что:
10 * 10 * 10 * 10
5. Вещественное число в степени
В степень можно возвести вещественное число:
2.5 ** 2
Результат:
6.25
Эта запись означает:
2.5 * 2.5
Ещё пример:
1.5 ** 3
Результат:
3.375
6. Вещественная степень
Показатель степени тоже может быть вещественным числом.
16 ** 0.5
Результат:
4.0
Возведение в степень 0.5 позволяет найти квадратный корень из положительного числа.
7. Квадратный корень
Мы знаем, что:
5 ** 2
Результат:
25
Противоположная операция:
25 ** 0.5
Результат:
5.0
Таким способом мы нашли квадратный корень из числа 25.
Ещё пример:
81 ** 0.5
Результат:
9.0
Потому что:
9 ** 2
Результат:
81
В будущем для математических вычислений мы познакомимся с модулем math.
На данном этапе для нахождения квадратного корня используем возведение в степень 0.5.
8. Отрицательная степень
Число можно возвести в отрицательную степень:
5 ** -2
Результат:
0.04
Математически это означает:
1 / 5²
Сначала вычисляется:
5 ** 2
Результат:
25
Затем:
1 / 25
Результат:
0.04
Несмотря на то что основание 5 и показатель степени -2 являются целыми числами, результат получился вещественным — float.
Отдельно унарный минус на этом уроке не рассматриваем. Здесь знак минус используется только внутри показателя степени.
9. Когда математическое выражение возвращает float
Ранее мы изучили два случая, при которых результат математического выражения становится float.
Обычное деление:
10 / 2
Результат:
5.0
Наличие хотя бы одного вещественного числа:
10 + 2.5
Результат:
12.5
Теперь мы знаем третий случай — отрицательная степень:
5 ** -2
Результат:
0.04
10. Приоритет возведения в степень
Возведение в степень имеет более высокий приоритет, чем:
- умножение;
- обычное деление;
- целочисленное деление;
- остаток от деления;
- сложение;
- вычитание.
Пример:
2 + 3 * 4 ** 2
Сначала выполняется возведение в степень:
4 ** 2
Результат:
16
После этого выполняется умножение:
3 * 16
Результат:
48
После этого выполняется сложение:
2 + 48
Итоговый результат:
50
11. Скобки имеют более высокий приоритет
Математические скобки позволяют изменить порядок выполнения операций.
Без дополнительных скобок:
2 + 3 * 4 ** 2
Результат:
50
Со скобками:
(2 + 3) * 4 ** 2
Сначала выполняется действие в скобках:
2 + 3
Результат:
5
После этого возведение в степень:
4 ** 2
Результат:
16
Затем умножение:
5 * 16
Итоговый результат:
80
Скобки имеют более высокий приоритет, чем возведение в степень.
12. Несколько операций возведения в степень
Рассмотрим выражение:
2 ** 3 ** 2
Операции возведения в степень выполняются справа налево.
Сначала выполняется:
3 ** 2
Результат:
9
После этого выполняется:
2 ** 9
Результат:
512
Поэтому:
2 ** 3 ** 2
Результат:
512
13. Изменение порядка с помощью скобок
Добавим скобки:
(2 ** 3) ** 2
Сначала выполняется действие в скобках:
2 ** 3
Результат:
8
Затем:
8 ** 2
Результат:
64
Сравним:
2 ** 3 ** 2
Результат:
512
(2 ** 3) ** 2
Результат:
64
Скобки изменили порядок вычисления и итоговый результат.
14. Три вида деления
Теперь мы знакомы с тремя операторами, связанными с делением:
/
Обычное деление.
//
Целочисленное деление.
%
Остаток от деления.
15. Деление числа 15 на 5
Обычное деление:
15 / 5
Результат:
3.0
Обычное деление всегда возвращает float.
Целочисленное деление:
15 // 5
Результат:
3
Остаток от деления:
15 % 5
Результат:
0
Число 15 делится на 5 без остатка.
16. Деление числа 14 на 5
Обычное деление:
14 / 5
Результат:
2.8
Целочисленное деление:
14 // 5
Результат:
2
Число 14 содержит два полных числа 5:
5 * 2
Результат:
10
Третье число 5 уже не помещается в 14.
Поэтому результат целочисленного деления равен 2.
17. Остаток от деления числа 14 на 5
Пример:
14 % 5
Результат:
4
В числе 14 помещается два полных числа 5:
5 * 2
Результат:
10
Вычитаем:
14 - 10
Результат:
4
Число 4 — остаток от деления 14 на 5.
18. Связь целочисленного деления и остатка
Рассмотрим:
14 // 5
Результат:
2
Это количество полных пятёрок в числе 14.
Рассмотрим:
14 % 5
Результат:
4
Это часть числа, которая осталась после двух полных пятёрок.
Проверим:
5 * 2 + 4
Результат:
14
19. Деление числа 123 на 10
Обычное деление:
123 / 10
Результат:
12.3
Целочисленное деление:
123 // 10
Результат:
12
В число 123 помещается двенадцать полных десятков:
10 * 12
Результат:
120
Остаток от деления:
123 % 10
Результат:
3
Потому что:
123 - 120
Результат:
3
20. Последняя цифра числа
Чтобы получить последнюю цифру целого положительного числа, используется остаток от деления на 10.
123 % 10
Результат:
3
4567 % 10
Результат:
7
98124 % 10
Результат:
4
Остаток от деления на 10 часто используется в алгоритмах для получения последней цифры числа.
21. Первая цифра четырёхзначного числа
Создадим переменную:
number = 1234
Чтобы получить первую цифру четырёхзначного числа, нужно выполнить целочисленное деление на 1000:
first_digit = number // 1000
Результат:
1
Обычное деление вернуло бы:
1234 / 1000
Результат:
1.234
Целочисленное деление оставляет количество полных тысяч:
1234 // 1000
Результат:
1
22. Вторая цифра четырёхзначного числа
Создадим переменную:
number = 1234
Сначала уберём две последние цифры:
number // 100
Результат:
12
Теперь заберём последнюю цифру числа 12:
12 % 10
Результат:
2
Полная запись:
second_digit = number // 100 % 10
Результат:
2
23. Третья цифра четырёхзначного числа
Создадим переменную:
number = 1234
Сначала уберём последнюю цифру:
number // 10
Результат:
123
Теперь получим последнюю цифру числа 123:
123 % 10
Результат:
3
Полная запись:
third_digit = number // 10 % 10
Результат:
3
24. Четвёртая цифра четырёхзначного числа
Последняя цифра получается с помощью остатка от деления на 10:
number = 1234
fourth_digit = number % 10
Результат:
4
25. Получение всех цифр четырёхзначного числа
number = 1234
first_digit = number // 1000
second_digit = number // 100 % 10
third_digit = number // 10 % 10
fourth_digit = number % 10
print(first_digit)
print(second_digit)
print(third_digit)
print(fourth_digit)
Результат:
1
2
3
4
Для первой цифры используется только целочисленное деление.
Для последней цифры используется остаток от деления на 10.
Для цифр в середине используются оба оператора:
//
%
26. Практическое применение целочисленного деления
Полные группы
Предположим, на складе находится 123 товара, а в одну коробку помещается 10 товаров.
Чтобы определить количество полностью заполненных коробок, используется:
123 // 10
Результат:
12
Получится 12 полных коробок.
Ещё 3 товара останутся отдельно.
Полные минуты
Предположим, программа получила время в секундах:
367
Чтобы определить количество полных минут, используется:
367 // 60
Результат:
6
Прошло 6 полных минут.
Такой расчёт может использоваться при обработке времени, логов или данных, приходящих с биржи.
Количество полных торговых контрактов
Предположим, для открытия одного фьючерсного контракта требуется определённая сумма, а программа знает доступный капитал.
Целочисленное деление можно использовать, чтобы определить, сколько полных контрактов или торговых лотов можно открыть, не превышая доступный капитал.
Дробную часть контракта в таком расчёте использовать нельзя, поэтому требуется именно количество полных единиц.
27. Практическое применение остатка от деления
Оставшиеся товары
Если на складе 123 товара, а в коробку помещается 10, остаток можно получить так:
123 % 10
Результат:
3
После заполнения полных коробок останутся 3 товара.
Оставшиеся секунды
Предположим, прошло:
367
секунд.
Количество полных минут:
367 // 60
Результат:
6
Оставшиеся секунды:
367 % 60
Результат:
7
Получается:
6 минут и 7 секунд
Распределение биржевых событий
Предположим, программа получает большое количество сделок с криптобиржи.
Чтобы равномерно распределять сделки между несколькими обработчиками, можно делить номер сделки с остатком на количество обработчиков.
Например, остаток от деления номера сделки на 4 будет показывать, в какой из четырёх обработчиков нужно отправить эту сделку.
Это позволяет распределять нагрузку между несколькими частями программы.
Последняя цифра идентификатора
В торговом боте может понадобиться получить последнюю цифру номера ордера или внутреннего идентификатора.
Для этого используется остаток от деления на 10.
Последняя цифра может применяться для:
- распределения записей по группам;
- выбора очереди обработки;
- формирования тестовых данных;
- выполнения отдельных действий для разных групп идентификаторов.
28. Целочисленное деление с float
Название «целочисленное деление» не означает, что результат всегда будет объектом класса int.
Если хотя бы один объект является float, результат тоже будет float.
14.0 // 5
Результат:
2.0
14 // 5.0
Результат:
2.0
14.0 // 5.0
Результат:
2.0
Если оба объекта являются int:
14 // 5
Результат:
2
29. Остаток от деления с float
Остаток от деления можно использовать с вещественными числами:
12.75 % 1
Результат:
0.75
При работе с положительным вещественным числом остаток от деления на 1 позволяет получить дробную часть числа.
Целая часть:
12.75 // 1
Результат:
12.0
Дробная часть:
12.75 % 1
Результат:
0.75
Полный пример:
number = 12.75
whole_part = number // 1
fractional_part = number % 1
print(whole_part)
print(fractional_part)
Результат:
12.0
0.75
30. Деление на ноль
На ноль нельзя делить ни одним из изученных способов.
Обычное деление:
10 / 0
Будет ошибка:
ZeroDivisionError
Целочисленное деление:
10 // 0
Будет ошибка:
ZeroDivisionError
Остаток от деления:
10 % 0
Будет ошибка:
ZeroDivisionError
Класс ошибки одинаковый:
ZeroDivisionError
Текст с подробным описанием ошибки может отличаться в зависимости от вида деления.
31. Приоритет операторов деления
Операторы:
*
/
//
%
имеют одинаковый приоритет.
Если в выражении находятся несколько таких операторов подряд, они выполняются слева направо.
Пример:
20 // 3 * 2
Сначала выполняется:
20 // 3
Результат:
6
Затем:
6 * 2
Результат:
12
32. Возведение в степень выполняется раньше деления
Пример:
20 // 2 ** 2
Сначала выполняется возведение в степень:
2 ** 2
Результат:
4
После этого:
20 // 4
Результат:
5
33. Изменение приоритета скобками
Без скобок:
20 // 2 ** 2
Результат:
5
Со скобками:
(20 // 2) ** 2
Сначала:
20 // 2
Результат:
10
Затем:
10 ** 2
Результат:
100
Скобки полностью изменили результат.
34. Основные правила урока
Возведение в степень:
5 ** 2
Квадратный корень из положительного числа:
25 ** 0.5
Отрицательная степень возвращает float:
5 ** -2
Обычное деление:
14 / 5
Результат:
2.8
Целочисленное деление:
14 // 5
Результат:
2
Остаток от деления:
14 % 5
Результат:
4
Первая цифра четырёхзначного числа:
number // 1000
Последняя цифра:
number % 10
На ноль нельзя делить ни с помощью /, ни с помощью //, ни с помощью %.
Домашнее задание
Как выполнять задания
Короткие задания, в которых нужно определить результат или найти ошибку, удобно выполнять в программе IDLE.
Порядок работы:
- прочитать выражение;
- определить предполагаемый результат;
- выполнить выражение в IDLE;
- проверить свой ответ.
Задачи, состоящие из нескольких строк кода, удобнее выполнять в Visual Studio Code.
Для такой задачи нужно создать отдельный Python-файл и сохранить в нём решение.
Часть 1. Возведение в степень
Задание 1
Сначала определить результат, затем проверить себя в IDLE:
2 ** 2
2 ** 3
3 ** 4
10 ** 3
5 ** 4
Задание 2
Заменить возведение в степень обычным умножением.
Пример:
4 ** 3
Нужно записать как:
4 * 4 * 4
Выражения:
5 ** 2
3 ** 3
2 ** 5
10 ** 4
Задание 3
Определить результаты:
2.5 ** 2
1.5 ** 3
4.0 ** 2
9 ** 0.5
100 ** 0.5
Для каждого результата определить, будет он int или float.
Задание 4
Найти квадратные корни с помощью возведения в степень 0.5:
- из числа
16; - из числа
25; - из числа
49; - из числа
64; - из числа
121.
Каждый результат сохранить в переменную с понятным именем.
Задание 5
Определить результат и тип результата:
2 ** -2
5 ** -1
10 ** -2
Объяснить, почему результат является float, хотя в выражении используются целые числа.
Часть 2. Приоритет операций
Задание 6
Определить порядок выполнения и итоговый результат:
2 + 3 ** 2
2 * 3 ** 2
20 // 2 ** 2
30 % 4 ** 2
2 + 3 * 4 ** 2
Задание 7
Сравнить результаты:
2 ** 3 ** 2
(2 ** 3) ** 2
Объяснить:
- какое действие выполняется первым в первом выражении;
- как скобки изменили второе выражение;
- почему результаты отличаются.
Задание 8
Поставить скобки так, чтобы получить указанный результат.
Из выражения:
2 + 3 * 4
получить результат:
20
Из выражения:
20 // 2 ** 2
получить результат:
100
Из выражения:
2 ** 3 ** 2
получить результат:
64
Часть 3. Три вида деления
Задание 9
Для каждой пары чисел выполнить:
- обычное деление;
- целочисленное деление;
- остаток от деления.
Пары чисел:
20 и 5
17 и 5
100 и 8
51 и 10
125 и 25
Пример для одной пары:
20 / 5
20 // 5
20 % 5
Задание 10
Определить результаты:
25 / 4
25 // 4
25 % 4
После этого проверить:
4 * 6 + 1
Объяснить связь между полученными значениями.
Задание 11
Заполнить пропуски:
37 // 10 = ...
37 % 10 = ...
81 // 10 = ...
81 % 10 = ...
456 // 100 = ...
456 % 100 = ...
999 // 100 = ...
999 % 100 = ...
Проверить ответы в IDLE.
Задание 12
Определить, какие выражения вернут int, а какие float:
15 // 4
15.0 // 4
15 // 4.0
15.0 // 4.0
15 % 4
15.0 % 4
Часть 4. Поиск ошибок
Задание 13
Определить, какие выражения приведут к ошибке:
10 / 2
10 / 0
10 // 2
10 // 0
10 % 3
10 % 0
25 ** 0.5
Для каждого ошибочного выражения указать класс ошибки.
Задание 14
Найти неправильные результаты:
14 / 5 = 2.8
14 // 5 = 2
14 % 5 = 4
25 / 5 = 5
25 // 5 = 5
25 % 5 = 5
123 / 10 = 12.3
123 // 10 = 12
123 % 10 = 3
19 // 4 = 4
19 % 4 = 4
Исправить все неправильные результаты.
Задание 15
Найти ошибки в рассуждениях:
- Оператор
//всегда возвращаетint. - Остаток от деления
15 % 5равен5. - Выражение
25 ** 0.5возвращает5. - Операции возведения в степень всегда выполняются слева направо.
- На ноль нельзя делить только обычным делением
/. - Последнюю цифру числа можно получить с помощью остатка от деления на
10.
Переписать неправильные утверждения правильно.
Часть 5. Получение цифр числа
Задание 16
Создать отдельный файл:
digits.py
Создать переменную:
number = 5678
Получить каждую цифру числа и сохранить её в отдельную переменную:
first_digit
second_digit
third_digit
fourth_digit
Вывести цифры через отдельные вызовы print().
Ожидаемый результат:
5
6
7
8
Задание 17
Создать переменную:
number = 9031
Определить:
- первую цифру;
- вторую цифру;
- третью цифру;
- последнюю цифру.
Использовать только:
//
%
Задание 18
Не преобразуя число в строку, получить последнюю цифру каждого числа:
123
9876
4501
10000
765432
Использовать остаток от деления на 10.
Задание 19
Создать переменную:
number = 1234
Поменять местами первую и последнюю цифры с помощью уже изученного множественного присваивания.
Нужно получить отдельные переменные:
first_digit
last_digit
Сначала в них должны находиться:
1
4
После обмена:
4
1
Само число 1234 собирать обратно не нужно.
Часть 6. Целая и дробная части
Задание 20
Создать отдельный файл:
number_parts.py
Создать переменную:
number = 18.75
Получить:
- целую часть с помощью
// 1; - дробную часть с помощью
% 1.
Сохранить результаты в переменные:
whole_part
fractional_part
Вывести оба значения.
Задание 21
Получить целую и дробную части чисел:
5.5
12.25
100.75
8.125
Использовать только:
// 1
% 1
Часть 7. Практические задачи
Задание 22. Коробки с товарами
Создать отдельный файл:
boxes.py
На складе находится:
product_count = 137
В одну коробку помещается:
box_size = 12
Определить:
- количество полностью заполненных коробок;
- количество оставшихся товаров.
Использовать:
//
%
Вывести оба результата.
Задание 23. Минуты и секунды
Создать отдельный файл:
time_parts.py
Дано количество секунд:
total_seconds = 367
Определить:
- количество полных минут;
- количество оставшихся секунд.
Ожидаемый результат:
6
7
Задание 24. Торговые лоты
Создать отдельный файл:
trading_lots.py
У торгового бота есть капитал:
capital = 1000
Стоимость одного торгового лота:
lot_price = 120
Определить:
- сколько полных лотов можно купить;
- сколько денег останется после покупки максимального количества полных лотов.
Использовать только ранее изученные операции.
Задание 25. Распределение сделок
Создать отдельный файл:
trade_distribution.py
Есть номер сделки:
trade_id = 12347
В программе работает четыре обработчика.
Определить остаток от деления номера сделки на 4.
Полученный остаток показывает номер группы, в которую попадёт сделка.
После этого самостоятельно проверить ещё три номера сделок:
12348
12349
12350
Часть 8. Итоговая задача
Задание 26
Создать отдельный файл:
math_operators.py
В программе необходимо:
- добавить комментарий с описанием программы;
- создать константу с количеством секунд в минуте;
- возвести целое число во вторую степень;
- возвести целое число в третью степень;
- найти квадратный корень из положительного числа с помощью степени
0.5; - выполнить обычное деление двух чисел;
- выполнить целочисленное деление тех же чисел;
- найти остаток от их деления;
- получить первую и последнюю цифры четырёхзначного числа;
- получить целую и дробную части положительного вещественного числа;
- перевести заданное количество секунд в полные минуты и оставшиеся секунды;
- вывести все результаты через
print(); - использовать понятные имена переменных в стиле
snake_case; - оформить код по правилам PEP 8;
- закончить файл пустой строкой.
Использовать только ранее изученные конструкции, функции, типы данных и операторы.