Что входит %
в расчет? Я не могу понять, что он делает.
Например, он вычисляет процент от расчета: 4 % 2
по-видимому, равен 0. Как?
Оператор% (по модулю) возвращает остаток от деления первого аргумента на второй. Числовые аргументы сначала преобразуются в общий тип. Нулевой правый аргумент вызывает исключение ZeroDivisionError. Аргументами могут быть числа с плавающей запятой, например, 3,14% 0,7 равно 0,34 (поскольку 3,14 равно 4 * 0,7 + 0,34.) Оператор по модулю всегда дает результат с тем же знаком, что и его второй операнд (или ноль); абсолютное значение результата строго меньше, чем абсолютное значение второго операнда [2].
Взято с http://docs.python.org/reference/expressions.html
Пример 1:
6%2
оценивается, 0
потому что нет остатка, если 6 делится на 2 (3 раза).
Пример 2 : 7%2
оценивается, 1
потому что есть остаток от 1
деления 7 на 2 (3 раза).
Таким образом, чтобы подвести итог, он возвращает остаток от операции деления, или 0
если нет остатка. Значит, 6%2
найдите остаток от 6, деленный на 2.
- 21 % 4
, 3 в Python.-11%5 = 4
?Несколько не по теме,
%
также используется в операциях форматирования строки, например,%=
для подстановки значений в строку:Опять же, не по теме, но, похоже, это была небольшая документированная особенность, которую мне потребовалось некоторое время, чтобы отследить, и я подумал, что это связано с вычислением по модулю Pythons, для которого эта SO-страница высоко оценивается.
источник
%=
не отображается на этой странице%
Оператор был выбран, потому что он отражает спецификаторы процентов, используемые в самой строке.Выражение like
x % y
оценивает остаток от ...x ÷ y
ну, технически это «модуль» вместо «напоминание», поэтому результаты могут отличаться, если вы сравниваете с другими языками, где%
есть оператор остатка. Есть некоторые тонкие различия (если вас интересуют практические последствия, см. Также «Почему полы с целочисленным делением в Python» ниже).Приоритет такой же, как у операторов
/
(деление) и*
(умножение).Гипотеза Python : в зависимости от используемой версии Python
%
также является (устаревшим) оператором интерполяции строк, так что следите, если вы пришли из языка с автоматическим приведением типов (например, PHP или JS), где выражение вроде'12' % 2 + 3
допустимо: Python приведет к тому,TypeError: not all arguments converted during string formatting
что, вероятно, будет довольно запутанным для вас.[обновление для Python 3]
Пользователь n00p комментирует:
Чтобы быть точным, целочисленное деление раньше использовалось по умолчанию в Python 2 (учтите, этот ответ старше моего мальчика, который уже учился в школе и в то время, когда 2.x были мейнстримом):
В современном Python
9 / 2
результаты4.5
действительно:[Обновить]
Пользователь dahiya_boy спросил в комментариях:
Это странно, правда? Если вы попробуете это в JavaScript:
Это связано с тем, что в JavaScript
%
это оператор «остаток», а в Python это оператор «модуль» (Clock Math).Вы можете получить объяснение непосредственно от GvR :
В Java и iOS,
-11 % 5 = -1
тогда как в python и ruby-11 % 5 = 4
.Ну, половина причины объясняется Пауло Скардином , а остальное объяснение здесь ниже
В Java и прошивкой,
%
дает остаток , что означает , если вы разделите на 11% 5 даетQuotient = 2 and remainder = 1
и -11% 5 даетQuotient = -2 and remainder = -1
.Пример кода в быстрой iOS.
Но когда мы говорим о Python, он дает модуль часов. И его работа с формулой ниже
mod(a,n) = a - {n * Floor(a/n)}
Это значит,
mod(11,5) = 11 - {5 * Floor(11/5)} => 11 - {5 * 2}
Так,
mod(11,5) = 1
И
mod(-11,5) = -11 - 5 * Floor(11/5) => -11 - {5 * (-3)}
Так,
mod(-11,5) = 4
Пример кода в Python 3.0.
источник
help(divmod)
документирует инвариантq, r = divmod(x y) <==> q*y + r == x
.Модуль - это математическая операция, иногда описываемая как «арифметика часов». Я считаю, что описание его просто как остатка вводит в заблуждение и вводит в заблуждение, потому что оно маскирует реальную причину, по которой он так часто используется в информатике. Это действительно используется, чтобы обернуть вокруг циклов.
Подумайте о часах. Предположим, вы смотрите на часы в «военное» время, где диапазон времени колеблется от 0:00 до 23,59. Теперь, если вы хотите, чтобы что-то происходило каждый день в полночь, вы бы хотели, чтобы текущее время мод 24 было равно нулю:
если (час% 24 == 0):
Вы можете думать о всех часах в истории, повторяющихся вокруг круга из 24 часов снова и снова, и текущий час дня - это бесконечно длинное число mod 24. Это гораздо более глубокая концепция, чем просто остаток, это математический способ. иметь дело с циклами, и это очень важно в информатике. Он также используется для обтекания массивов, что позволяет вам увеличивать индекс и использовать модуль для переноса назад в начало после достижения конца массива.
источник
a % b = a - b * floor(a/b)
Python - основные операторы
http://www.tutorialspoint.com/python/python_basic_operators.htm
а = 10 и б = 20
б% а = 0
источник
В большинстве языков% используется для модуля . Python не является исключением.
источник
Оператор% Modulo также можно использовать для печати строк (как в C), как это определено в Google https://developers.google.com/edu/python/strings .
Это кажется немного не по теме, но это, безусловно, поможет кому-то.
источник
x % y
вычисляет остаток от деления,x
деленный на то,y
где частным является целое число . Остальная часть имеет знакy
.На Python 3 расчет дает
6.75
; это происходит потому, что/
выполняется истинное деление, а не целочисленное деление, как (по умолчанию) в Python 2. В Python 21 / 4
выдает 0, а результат округляется в меньшую сторону.Целочисленное деление может быть выполнено и на Python 3, с
//
оператором, таким образом, чтобы получить 7 в результате, вы можете выполнить:Кроме того, вы можете получить разделение стиля Python на Python 2, просто добавив строку
в качестве первой строки исходного кода в каждом исходном файле.
источник
#
для комментариев и//
является оператором.Оператор модуля, он обычно используется для деления остатка на целые числа, но в Python может использоваться для чисел с плавающей запятой.
http://docs.python.org/reference/expressions.html
источник
Это операция по модулю, за исключением случаев, когда это устаревший оператор форматирования строк в стиле C, а не операция по модулю . Смотрите здесь для деталей. Вы увидите много этого в существующем коде.
источник
Также есть полезная встроенная функция
divmod
:источник
Быть в курсе, что
даже в скобках результат равен 6,75 вместо 7, если он рассчитан в Python 3.4.
И оператор '/' тоже не так легко понять (python2.7): try ...
Это немного не по теме, но это следует учитывать при оценке приведенного выше выражения :)
источник
(1)+(0)-(0.25)+(6)
.Мне было трудно легко найти конкретные варианты использования% онлайн, например, почему деление с дробным модулем или деление с отрицательным модулем приводит к полученному ответу. Надеюсь, это поможет прояснить такие вопросы:
Модуль деления в целом:
Модуль деления возвращает остаток от математического деления. Это делает это следующим образом:
Скажем, у нас есть дивиденд 5 и делитель 2, следующая операция деления будет (приравнена к х):
Первым шагом в расчете модуля является проведение целочисленного деления:
x_int = 5 // 2 (целочисленное деление в питоне использует двойную косую черту)
x_int = 2
Затем вывод x_int умножается на делитель:
x_mult = x_int * делитель x_mult = 4
Наконец, дивиденд вычитается из x_mult
дивиденд - x_mult = 1
Следовательно, операция модуля возвращает 1:
5% 2 = 1
Приложение для применения модуля к дроби
Расчет модуля применительно к дроби такой же, как указано выше; однако важно отметить, что целочисленное деление приведет к значению ноль, когда делитель больше, чем дивиденд:
Целочисленное деление приводит к 0, тогда как; следовательно, когда вышеуказанный шаг 3 выполняется, значение дивиденда переносится (вычитается из нуля):
Приложение для применения модуля к отрицательному
Происходит деление по полу, при котором значение целочисленного деления округляется до наименьшего целочисленного значения:
Поэтому, когда вы делаете целочисленное деление, вы можете получить результат, отличный от ожидаемого!
Применение описанных выше шагов к следующему дивиденду и делителю иллюстрирует концепцию модуля:
Шаг 1: применить целочисленное деление
Шаг 2: Умножьте результат деления на целое на делитель
Шаг 3: Вычтите дивиденды из умноженной переменной, обратите внимание на двойной минус.
Следовательно:
источник
Оператор% (по модулю) возвращает остаток от деления первого аргумента на второй. Числовые аргументы сначала преобразуются в общий тип.
Это основано на приоритетах операторов.
источник
%
является по модулю .3 % 2 = 1
,4 % 2 = 0
/
есть (целое число в данном случае) деление, поэтому:источник
Это операция по модулю http://en.wikipedia.org/wiki/Modulo_operation
http://docs.python.org/reference/expressions.html
Так что с порядком операций, это работает для
(3 + 2 + 1-5) + (4% 2) - (1/4) + 6
(1) + (0) - (0) + 6
7
1/4 = 0, потому что мы делаем целочисленную математику здесь.
источник
Это, как и во многих С-подобных языках, остаток или операция по модулю. См. Документацию для числовых типов - int, float, long, complex .
источник
Модуль - Делит левый операнд на правый операнд и возвращает остаток.
Если это поможет:
... и так далее.
источник
Я обнаружил, что самый простой способ понять оператор модуля (%) - это длинное деление. Это остаток и может быть полезен при определении числа, чтобы быть четным или нечетным:
источник