Степени, целочисленное деление и остаток в 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.

Порядок работы:

  1. прочитать выражение;
  2. определить предполагаемый результат;
  3. выполнить выражение в IDLE;
  4. проверить свой ответ.

Задачи, состоящие из нескольких строк кода, удобнее выполнять в 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:

  1. из числа 16;
  2. из числа 25;
  3. из числа 49;
  4. из числа 64;
  5. из числа 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

Объяснить:

  1. какое действие выполняется первым в первом выражении;
  2. как скобки изменили второе выражение;
  3. почему результаты отличаются.

Задание 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

Найти ошибки в рассуждениях:

  1. Оператор // всегда возвращает int.
  2. Остаток от деления 15 % 5 равен 5.
  3. Выражение 25 ** 0.5 возвращает 5.
  4. Операции возведения в степень всегда выполняются слева направо.
  5. На ноль нельзя делить только обычным делением /.
  6. Последнюю цифру числа можно получить с помощью остатка от деления на 10.

Переписать неправильные утверждения правильно.


Часть 5. Получение цифр числа

Задание 16

Создать отдельный файл:

digits.py

Создать переменную:

number = 5678

Получить каждую цифру числа и сохранить её в отдельную переменную:

first_digit
second_digit
third_digit
fourth_digit

Вывести цифры через отдельные вызовы print().

Ожидаемый результат:

5
6
7
8

Задание 17

Создать переменную:

number = 9031

Определить:

  1. первую цифру;
  2. вторую цифру;
  3. третью цифру;
  4. последнюю цифру.

Использовать только:

//
%

Задание 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;
  2. дробную часть с помощью % 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

Определить:

  1. количество полностью заполненных коробок;
  2. количество оставшихся товаров.

Использовать:

//
%

Вывести оба результата.


Задание 23. Минуты и секунды

Создать отдельный файл:

time_parts.py

Дано количество секунд:

total_seconds = 367

Определить:

  1. количество полных минут;
  2. количество оставшихся секунд.

Ожидаемый результат:

6
7

Задание 24. Торговые лоты

Создать отдельный файл:

trading_lots.py

У торгового бота есть капитал:

capital = 1000

Стоимость одного торгового лота:

lot_price = 120

Определить:

  1. сколько полных лотов можно купить;
  2. сколько денег останется после покупки максимального количества полных лотов.

Использовать только ранее изученные операции.


Задание 25. Распределение сделок

Создать отдельный файл:

trade_distribution.py

Есть номер сделки:

trade_id = 12347

В программе работает четыре обработчика.

Определить остаток от деления номера сделки на 4.

Полученный остаток показывает номер группы, в которую попадёт сделка.

После этого самостоятельно проверить ещё три номера сделок:

12348
12349
12350

Часть 8. Итоговая задача

Задание 26

Создать отдельный файл:

math_operators.py

В программе необходимо:

  1. добавить комментарий с описанием программы;
  2. создать константу с количеством секунд в минуте;
  3. возвести целое число во вторую степень;
  4. возвести целое число в третью степень;
  5. найти квадратный корень из положительного числа с помощью степени 0.5;
  6. выполнить обычное деление двух чисел;
  7. выполнить целочисленное деление тех же чисел;
  8. найти остаток от их деления;
  9. получить первую и последнюю цифры четырёхзначного числа;
  10. получить целую и дробную части положительного вещественного числа;
  11. перевести заданное количество секунд в полные минуты и оставшиеся секунды;
  12. вывести все результаты через print();
  13. использовать понятные имена переменных в стиле snake_case;
  14. оформить код по правилам PEP 8;
  15. закончить файл пустой строкой.

Использовать только ранее изученные конструкции, функции, типы данных и операторы.