Каков результат% в Python? - PullRequest
       85

Каков результат% в Python?

205 голосов
/ 13 декабря 2010

Что означает % в расчете?Кажется, я не могу понять, что он делает.

Работает ли процент вычисления, например: 4 % 2 очевидно равно 0. Как?

Ответы [ 18 ]

265 голосов
/ 13 декабря 2010

Оператор% (по модулю) возвращает остаток от деления первого аргумента на второй. Числовые аргументы сначала преобразуются в общий тип. Аргумент «ноль вправо» вызывает исключение 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.

128 голосов
/ 15 февраля 2013

Несколько не по теме, % также используется в операциях форматирования строк, таких как %=, для подстановки значений в строку:

>>> x = 'abc_%(key)s_'
>>> x %= {'key':'value'}
>>> x 
'abc_value_'

Опять же, не по теме, но, похоже, это небольшая документированная функция, на которую мне потребовалось некоторое время, чтобы отследить, и Я подумал, что это связано с вычислением по модулю Pythons, для которого эта SO-страница высоко оценивается.

46 голосов
/ 22 октября 2013

Модуль - это математическая операция, иногда описываемая как «арифметика часов».Я считаю, что описание его просто как остатка вводит в заблуждение и вводит в заблуждение, поскольку оно скрывает реальную причину, по которой он так часто используется в информатике.Это действительно используется, чтобы обернуть вокруг циклов.

Подумайте о часах. Предположим, вы смотрите на часы в «военное» время, где диапазон времени колеблется от 0:00 до 23,59.Теперь, если вы хотите, чтобы что-то происходило каждый день в полночь, вы бы хотели, чтобы текущее время мод 24 было равно нулю:

if (hour% 24 == 0):

Можно подуматьвсе часы в истории, повторяющиеся вокруг круга из 24 часов снова и снова, и текущий час дня - это бесконечно длинное число mod 24. Это гораздо более глубокая концепция, чем просто остаток, это математический способ работы с цикламии это очень важно в информатике.Он также используется для обтекания массивов, что позволяет вам увеличивать индекс и использовать модуль для переноса в начало после того, как вы достигнете конца массива.

46 голосов
/ 13 декабря 2010

Выражение типа x % y оценивается как остаток от x ÷ y. Приоритет такой же, как у операторов / (деление) и * (умножение).

>>> 9 / 2
4
>>> 9 % 2
1
  • 9, деленное на 2, равно 4.
  • 4 раза 2 равно 8
  • 9 минус 8 равен 1 - остаток.

Python получил : в зависимости от используемой версии Python, % также является (устаревшим) оператором интерполяции строк, поэтому следите, если вы переходите с языка с автоматическим приведением типов (например, PHP или JS), где выражение типа '12' % 2 + 3 является допустимым: в Python это приведет к TypeError: not all arguments converted during string formatting, что, вероятно, будет довольно запутанным для вас.

[обновление для Python 3]

Комментарии пользователя n00p:

9/2 - это 4,5 в питоне. Вы должны выполнить целочисленное деление следующим образом: 9 // 2, если вы хотите, чтобы python сообщал вам, сколько всего объектов осталось после деления (4).

Если быть точным, целочисленное деление раньше использовалось по умолчанию в Python 2 (учтите, этот ответ старше моего мальчика, который уже учится в школе):

$ python2.7
Python 2.7.10 (default, Oct  6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4
>>> 9 // 2
4
>>> 9 % 2
1

В Python 3 теперь 9 / 2 результаты 4.5 действительно, но имейте в виду, что оригинальный ответ очень старый.

$ python3.6
Python 3.6.1 (default, Apr 27 2017, 00:15:59)
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 9 / 2
4.5
>>> 9 // 2
4
>>> 9 % 2
1
9 голосов
/ 13 декабря 2010

Python - Основные операторы
http://www.tutorialspoint.com/python/python_basic_operators.htm

Модуль - Делит левый операнд на правый операнд и возвращает остаток

а = 10 и б = 20

b% a = 0

8 голосов
/ 13 декабря 2010

В большинстве языков% используется для модуль .Python не исключение.

5 голосов
/ 21 апреля 2017

% Оператор по модулю может также использоваться для печати строк (как в C), как это определено в Google,

4 голосов
/ 16 февраля 2015

x % y вычисляет остаток от деления x, деленное на y, где частным является целое число .Остаток имеет знак y.


На Python 3 вычисление дает 6.75;это потому, что / выполняет истинное деление, а не целочисленное деление, как (по умолчанию) в Python 2. В Python 2 1 / 4 дает 0, а результат округляется в меньшую сторону.

Целочисленное деление можетсделать это на Python 3 тоже, с оператором //, таким образом, чтобы получить 7 в результате, вы можете выполнить:

3 + 2 + 1 - 5 + 4 % 2 - 1 // 4 + 6

Кроме того, вы можете получить деление стиля Python на Python 2, простодобавление строки

from __future__ import division

в качестве первой строки исходного кода в каждый исходный файл.

4 голосов
/ 13 декабря 2010

Также есть полезная встроенная функция, которая называется divmod:

divmod (a, b)

Возьмите два (не сложных) числа в качестве аргументов и верните пару чисел состоящий из их частного и остаток при использовании длинного деления.

3 голосов
/ 13 декабря 2010

Оператор модуля, он обычно используется для деления остатка на целые числа, но в Python может использоваться для чисел с плавающей точкой.

http://docs.python.org/reference/expressions.html

Оператор% (по модулю) возвращает остаток от деления первого аргумента на второй. Числовые аргументы сначала преобразуются в общий тип. Аргумент «ноль вправо» вызывает исключение ZeroDivisionError. Аргументами могут быть числа с плавающей запятой, например, 3,14% 0,7 равно 0,34 (поскольку 3,14 равно 4 * 0,7 + 0,34.) Оператор по модулю всегда дает результат с тем же знаком, что и его второй операнд (или ноль); абсолютное значение результата строго меньше, чем абсолютное значение второго операнда [2].

...