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

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

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

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

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

Ответы [ 18 ]

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

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

2 голосов
/ 11 февраля 2015

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

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

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


И оператор '/' не так простчтобы понять тоже (python2.7): try ...

- 1/4

1 - 1/4

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

1 голос
/ 18 декабря 2017

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

Модуль деления в целом:

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

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

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
1 голос
/ 13 декабря 2010

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

1 голос
/ 29 апреля 2016

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

Если это помогает:

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

... и т. Д.

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

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

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

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

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

% равно по модулю .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
0 голосов
/ 13 декабря 2010

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

...