Каково значение% в 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
.
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 тоже интересный случай. Даже немного больше.
0 плюса
% является оператором модуля: он вернет остаток от того, что в основном является целочисленной операцией деления. 5 % 2 = 1
, 5 % 5 = 0
и т. д. В обычной целочисленной математике все результаты округляются в меньшую сторону, поэтому 5/2 вернет 2, хотя два раза в пять в 2,5 раза. Конечно, 0 - это особый случай, и он имеет неопределенное поведение в большинстве языков.
-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
Вопросы из категории :
- python Обработка XML в Python
- python Как я могу использовать Python itertools.groupby ()?
- python Python: На какой ОС я работаю?
- python Как я могу создать непосредственно исполняемое кроссплатформенное приложение с графическим интерфейсом на Python?
- python Вызов функции модуля с использованием его имени (строки)
- python Звук Питона («Колокол»)
- python Regex и unicode
- python Создать зашифрованный ZIP-файл в Python
- python Создайте базовый итератор Python
- python Функция транспонирования / распаковки (обратная сторона zip)?
- python Каков наилучший способ разбора аргументов командной строки?
- python Формат чисел в строки в Python
- python Как загрузить файл через HTTP с помощью Python?
- python Is there any difference between "foo is None" and "foo == None"?
- python Как запустить сценарий Python как службу в Windows?
- python Нахождение каких методов у объекта Python
- python Как отсортировать список строк?
- python Что ** (двойная звезда / звездочка) и * (звездочка / звездочка) делают для параметров?
- python What is the purpose of class methods?
- python Какой лучший способ вернуть несколько значений из функции в Python?