我是编程语言的新手,也是 Python 的新手。
尽管我已经阅读了 3 个解释它的简短教程,但我仍然无法理解 % 的重要性。
有人可以分解 % 在这段代码中到底在做什么吗?
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print n, "=", x, "*", n/x
我是编程语言的新手,也是 Python 的新手。
尽管我已经阅读了 3 个解释它的简短教程,但我仍然无法理解 % 的重要性。
有人可以分解 % 在这段代码中到底在做什么吗?
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print n, "=", x, "*", n/x
对于数字,它返回除法的余数(正如 squiguy 指出的那样)。
10 / 3 是 3,余数是 1。
所以10 % 3 == 1
。
它最常见的用途是检查可分性。例如,在该循环中,它检查 n 是否可被 x 整除。例如,它可以用来做某事每 n次。
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
在这种情况下 % 运算符是模运算符
如规范中所述:
%(取模)运算符产生第一个参数除以第二个参数的余数。数字参数首先转换为通用类型。零右参数引发 ZeroDivisionError 异常。参数可以是浮点数,例如,3.14%0.7 等于 0.34(因为 3.14 等于 4*0.7 + 0.34。)模运算符总是产生与第二个操作数(或零)具有相同符号的结果;结果的绝对值严格小于第二个操作数的绝对值
在这种情况下,您将在除法中找到余数n / x
您的代码示例从 迭代n=2
到n=9
。对于每个n
,内部循环检查所有n
大于 1 的除数。对于每个除数,它打印出一行显示 的因式分解n
。
对于数字,它是模运算符。对于字符串,它是“字符串插值”(或“字符串格式化”)运算符。
代码中的具体习语if n % x == 0:
对应一个可分性测试。换句话说,True
如果 n 可以被 x 整除(即除法的余数n / x
为 0),则将得出结果。或者,如果你愿意,n 是 x 的倍数(有一些整数 y 使得 x * y == n)。
为了更好地解释它,让我们分析一下(在外部)为6时的内部迭代n
。它相当于:
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 也是一个有趣的例子。甚至更是如此。
% 是模运算符:它将返回基本上是整数除法运算的余数。5 % 2 = 1
, 5 % 5 = 0
, 等等。在常规整数数学中,所有结果都向下舍入,因此 5 / 2 将返回 2,即使两个适合 5 个 2.5 倍。当然 0 是一种特殊情况,在大多数语言中具有未定义的行为。
在算术中,如果你使用一组实数(或有理数),然后除以 ,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)