it-swarm.com.ru

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

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

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

181
orange

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

232
meder omuraliev

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

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

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

119
mrmagooey

Выражение наподобие 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
42
Paulo Scardine

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

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

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

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

39
jarvis01123

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

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

а = 10 и б = 20 

б% а = 0

9
Halil

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

8
Sorpigal

Оператор% 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')

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

5
Harshit Chaudhary

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
Antti Haapala

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

divmod (a, b)

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

4
warvariuc

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

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

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

3
wkl

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

3
John Machin

Быть в курсе, что 

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

даже в скобках результат равен 6,75 вместо 7, если он рассчитан в Python 3.4.


И оператор '/' тоже не так легко понять (python2.7): try ...

- 1/4

1 - 1/4

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

2
bernhard

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

1
Andrew Jaffe

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

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

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

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

1
gr8scott06

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

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

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

0
user225312

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

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

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

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

dividend = 5
divisor = 2

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

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

    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
0
N.Atanasov

% is по модулю . 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
khachik

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

0
Marc Hughes