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