Каково значение% в Python

python

126 просмотра

5 ответа

Я новичок в языках программирования и новенький в Python.

У меня все еще есть проблемы с пониманием значения%, хотя я прочитал 3 коротких урока, которые объясняют это.

Может кто-нибудь разобрать, что% делает именно в этом коде?

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print n, "=", x, "*", n/x
Автор: david Источник Размещён: 12.11.2019 09:08

Ответы (5)


4 плюса

Для чисел он возвращает остаток от деления (как указал squiguy).

10/3 - 3 с остатком 1.

Так 10 % 3 == 1.


Чаще всего используется для проверки делимости. Например, в этом цикле он проверяет, делится ли n на x. Например , это можно использовать , чтобы сделать что - то каждый п - й раз.

for i in range(1, 10):
   if i % 3 == 0:
       print "I love cats and dogs"
   else:
       print "I love cats"

Выходы,

I love cats
I love cats
I love cats and dogs
I love cats
I love cats
I love cats and dogs
I love cats
I love cats
I love cats and dogs
Автор: Brigand Размещён: 14.08.2013 04:47

1 плюс

Оператор% в этом случае является оператором по модулю

Как объяснено в спецификации:

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

В этом случае вы находите остаток в разделе n / x

Ваш пример кода повторяется от n=2до n=9. Для каждого nвнутренний цикл проверяет все делители n, которые больше 1. Для каждого делителя он выводит строку, показывающую факторизацию n.

Автор: SheetJS Размещён: 14.08.2013 04:46

1 плюс

Для чисел это оператор модуля. Для строк это оператор «интерполяция строки» (или «форматирование строки»).

Конкретная идиома if n % x == 0:в коде соответствует тесту делимости. Другими словами, это приведет к тому, Trueчто n делится на x (т. Е. Остаток от деления n / xравен 0). Или, если хотите, n кратно x (есть некоторое целое число y, такое что x * y == n).

Чтобы объяснить это лучше, давайте проанализируем внутреннюю итерацию, когда n(во внешней) она равна 6. Это было бы эквивалентно:

for x in range(2, 6):
    if 6 % x == 0:
        print n, "=", x, "*", n/x

С трассировкой выполнения:

x   6 % x  6 % x == 0    6 / x     Output
--  -----  ----------  ----------  ------
2     0       True         3       6 = 2 * 3
3     0       True         2       6 = 3 * 2
4     2       False    Irrelevant  <none>
5     1       False    Irrelevant  <none>

Вы можете продолжить и попробовать с другими значениями n. Или все 9 из них. Вы увидите, что, как 6, 8 тоже интересный случай. Даже немного больше.

Автор: Mario Rossi Размещён: 14.08.2013 04:59

0 плюса

% является оператором модуля: он вернет остаток от того, что в основном является целочисленной операцией деления. 5 % 2 = 1, 5 % 5 = 0и т. д. В обычной целочисленной математике все результаты округляются в меньшую сторону, поэтому 5/2 вернет 2, хотя два раза в пять в 2,5 раза. Конечно, 0 - это особый случай, и он имеет неопределенное поведение в большинстве языков.

Автор: Rob G Размещён: 14.08.2013 04:40

-1 плюса

В арифметике, если вы используете набор действительных чисел (или рациональных чисел) и делите, скажем 1/2, вы можете получить 0.5в качестве ответа. Теперь, если вы ограничитесь использованием только целых чисел, 1/2вернетесь 0, потому что в целых числах 1не делится на 2. Таким образом, один из способов целочисленного деления состоит в том, чтобы выполнить длинное деление, сохранить целочисленную часть результата как результат целочисленного деления и, чтобы не потерять какие-либо данные, сохранить также остаток, который %возвращает оператор. ,

В Python, когда вы делаете стандартное разделение /, вы фактически делаете деление с плавающей запятой (так дроби могут быть представлены), и , следовательно 1/2 = 0.5. Теперь, если вы использовали целочисленное деление //, тогда 1//2 = 0. Чтобы получить это значение, python просто выполняет стандартное деление и получает результат. Если бы вы вручную выписали алгоритм деления на бумаге, вы бы заметили, что у этого деления есть остаток от 1. Оператор модуля %просто возвращает этот остаток.

Так, 1/2 = 0.5, 1//2 = 0и 1%2 = 1.

Другими словами, %возвращает тот же остаток, который вы получили бы при выполнении длинного деления.

     _0_ <-- result of (1//2)
   2| 1
     -0
     ---
      1 <- remainder, result of (1 % 2)
Автор: gos1 Размещён: 14.08.2013 04:50
Вопросы из категории :
32x32