Как % работает в Python?


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

работает ли он в процентах от расчета, например:3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6 по-видимому, равно 7. Как?

18 154

18 ответов:

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

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

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

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

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

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

Если (час % 24 == 0):

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

выражение типа 'x % y' вычисляется как остаток 'x / y'. Правила приоритета похожи на ' / 'и'*'.

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

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

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

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

9/2-это 4.5 в python. Вы должны сделать целочисленное деление следующим образом: 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

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

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

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

a = 10 и b = 20

b % a = 0

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

divmod (a, b)

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

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

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

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

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

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

это операция по модулю, за исключением случаев, когда это старомодный оператор форматирования строк в стиле C, а не операция по модулю. Смотрите здесь для сведения. Вы увидите много этого в существующем коде.

имейте в виду, что

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

даже с скобками приводит к 6.75 вместо 7, Если вычисляется в Python 3.4.


и оператор ' / ' тоже не так легко понять (python2.7): попробуйте...

- 1/4

1 - 1/4

Это немного не по теме здесь, но должно учитываться при оценке приведенного выше выражения :)

% Modulo также может использоваться для печати строк (как и в C), как определено в Google https://developers.google.com/edu/python/strings.

      # % operator
  text = "%d little pigs come out or I'll %s and %s and %s" % (3, 'huff', 'puff', 'blow down')

это, кажется, откусил тему, но это, безусловно, поможет кому-то.

Это, как и во многих C-подобных языках, остаток или операция по модулю. Смотрите документация для числовых типов-int, float, long, complex.

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

Если это поможет:

1:0> 2%6
=> 2
2:0> 8%6
=> 2
3:0> 2%6 == 8%6
=> true

... и так далее.

оператор % (по модулю)дает остаток от деления первого аргумента на второй. Числовые аргументы сначала преобразуются в общий тип.

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

это основано на приоритете оператора.

% и по модулю. 3 % 2 = 1,4 % 2 = 0

/ это (целое число в данном случае) подразделение, так:

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

Это операция по модулю 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, потому что мы делаем целочисленную математику здесь.

мне было трудно легко найти конкретные случаи использования для использования % online, например, почему разделение дробного модуля или отрицательного модуля приводит к ответу, что это так. Надеюсь, это поможет прояснить такие вопросы:

Модуль Деления В Целом:

модуль деления возвращает остаток операции математического деления. Он делает это следующим образом:

скажем, у нас есть дивиденд 5 и делитель 2, Следующая операция деления будет (приравнивается к x):

dividend = 5
divisor = 2

x = 5/2 
  1. первым шагом в вычислении модуля является проведение целочисленного деления:

    x_int = 5 / / 2 ( целочисленное деление в python использует двойную косую черту)

    x_int = 2

  2. далее, выход x_int умножается на делитель:

    x_mult = x_int * делитель x_mult = 4

  3. наконец, дивиденды вычитаются из x_mult

    дивиденды - x_mult = 1

  4. таким образом ,операция модуля возвращает 1:

    5 % 2 = 1

применение для применения модуля к фракции

Example: 2 % 5 

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

dividend = 2 
divisor = 5

целочисленное деление приводит к 0, тогда как; поэтому, когда выполняется Шаг 3 выше, значение дивиденда переносится (вычитается из нуля):

dividend - 0 = 2  —> 2 % 5 = 2 

применение для применения модуля к отрицательному

происходит деление пола, в котором значение целочисленного деления округляется до самого низкого целочисленного значения:

import math 

x = -1.1
math.floor(-1.1) = -2 

y = 1.1
math.floor = 1
, когда вы делаете целочисленное деление вы можете получить другой результат, чем вы ожидаете!

применение описанных выше шагов к следующему делителю и делителю иллюстрирует концепцию модуля:

dividend: -5 
divisor: 2 

Шаг 1: применить целочисленное деление

x_int = -5 // 2  = -3

Шаг 2: умножьте результат целочисленного деления на делитель

x_mult = x_int * 2 = -6

Шаг 3: вычесть дивиденды из умноженной переменной, обратите внимание на двойной отрицательный.

dividend - x_mult = -5 -(-6) = 1

таким образом:

-5 % 2 = 1