Целочисленное деление в Python
Как вы знаете, в Python есть два способа делить целые числа.
Оператор / при делении целого числа на целое возвращает результат типа float.
>>> 3 / 2 1.5 # float
А оператор // при делении целого на целое возвращает целое с округлением вниз, по-английски этот оператор еще называют floor division.
>>> 3 // 2 1 # int
Копалась в истории языка и узнала, что изначально деление целых чисел в Python было только целочисленное, и для него Гвидо использовал символ / . Но быстро стало понятно, что в языке, где программист не объявляет типы явно, использование такого символа неудобно и будет приводить к обилию ошибок в программах.
Поэтому часть сообщества (включая Гвидо) настаивала на том, что оператором целочисленного деления нужно выбрать символ // , а оператор деления, который возвращает тип float, должен быть /. Другие разработчики говорили, что целочисленное деление нужно писать как /, аргументируя это тем, что «научиться обращаться с целочисленным делением — это как обряд инициации для начинающих программистов», да и в C целочисленное деление пишется именно так.
Вот что Гвидо пишет об этом в своем блоге (в моем вольном переводе):
Чтобы услышать мнение человека, далекого от программирования, я спросил свою подругу, которая занималась средневековой английской литературой. Разговор был примерно такой:
Я: Вот ты берешь два целых числа. Хорошо?
Она: Хорошо!
Я: Теперь ты можешь их сложить, вычесть, умножить в программе, правильно?
Она: Хм, конечно!
Я: А теперь предположим, что ты их делишь…
Она: Но в этом нет смысла! Целые числа образуют кольцо, а не поле. Ты ведь сказал, что взял эти числа из Z, верно?
Я: Ага.
Вот и все. Это точка зрения непрограммиста (с которой мне удобно согласиться). Целочисленное деление — это чушь и его не нужно писать как «/», даже если в C делают именно так;-)
Действительно, с точки зрения непрограммиста, целочисленное деление довольно странная история, ведь над целыми числами, как и над матрицами, нет деления в принципе!
- http://python-history.blogspot.com/2009/03/problem-with-integer-division.html
- https://www.python.org/doc/humor/#neutral-testimony.
Как обозначается целочисленное деление python



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
Функция divmod() в Python
Функция divmod() в Python используется для деления двух входных чисел. Числа не должны быть сложными и могут быть записаны в любом формате, таком как десятичный, двоичный, шестнадцатеричный и т.д.
divmod(a, b)
На выходе получается кортеж, состоящий из их частного и остатка при использовании целочисленного деления.
Для целочисленных аргументов результат такой же, как (a // b, a% b).
Для чисел с плавающей запятой результат будет (q, a% b), где q обычно (math.floor (a / b), a% b). В любом случае q * b + a% b очень близко к a.
Если a% b не равно нулю, он имеет тот же знак, что и b, и 0
Пример с целыми числами
# simple example, returns (a // b, a % b) for integers dm = divmod(10, 3) print(dm) x, y = divmod(10, 3) print(x) print(y) dm = divmod(0xF, 0xF) # hexadecimal print(dm)
(3, 1) 3 1 (1, 0)
Пример с числами с плавающей запятой
# floats, returns usually (math.floor(a / b), a % b) dm = divmod(10.3, 3) print(dm) dm = divmod(11.51, 3) print(dm) dm = divmod(-11.51, 3) print(dm)
(3.0, 1.3000000000000007) (3.0, 2.51) (-4.0, 0.4900000000000002)
Обратите внимание, что в случае с плавающей запятой q * b + a% b в некоторых случаях очень близко к a.
Пример с комплексными числами
Если мы передадим комплексные числа в качестве аргумента, мы получим TypeError.
dm = divmod(3 + 2J, 3)
Теоретический материал Деление без остатка
Чтобы выполнить деление на цело в Python, можно воспользоваться целочисленным делением. В этом случае результатом будет целое число, без остатка. Целочисленное деление в Python обозначается двумя косыми чертами «//».
В отличие от других языков программирования Python позволяет результату целочисленного деления быть как целым (int), так и дробным (float) числом. В обоих случаях дробная часть отбрасывается и получается число с окончанием «.0».
Примеры нахождения целой части от деления:
print(5 // 2)
print(0 // 2)
print(1234 // 5.0)
2
0
246.0
В первых двух случаях деление осуществлялось между целыми числами. Поэтому в результате было получено целое число. В третьем примере одно из чисел вещественное. В этом случае в результате получаем так же вещественное число (типа float), после запятой у которого 0.
Остаток
Для получения остатка от деления в Python 3 используется операция, обозначающаяся символом процента «%». Остаток — это оставшаяся после целочисленного деления часть числа. Операция взятия остатка используется для решения различных видов задач.
Примеры:
print(10 % 3)
print(5 % 10)
print(5 % 0.25)
1
5
0.0
Определение остатка от деления очень часто используется в программах для нахождения, допустим, чётных чисел. Или, например, если обработка данных выполняется в цикле, и нужно выводить в консоль сообщение о ходе обработки не каждый раз, а на каждой 10-ой итерации.
Домашнее задание 3_1
Решение записать в тетрадь.
45 // 10 =
450 % 10 =
231 //100 =
312 % 100 =
(520 // 10) % 10 =
8456 % (261 //100) =
Пусть а = 26 и b = 6. Вычислите значение переменной с.
c = (а % b) + b
c = (а // b) + a
c = а % (b + 1)