0

我是编程语言的新手,也是 Python 的新手。

尽管我已经阅读了 3 个解释它的简短教程,但我仍然无法理解 % 的重要性。

有人可以分解 % 在这段代码中到底在做什么吗?

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

5 回答 5

4

对于数字,它返回除法的余数(正如 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
于 2013-08-14T04:47:09.953 回答
1

在这种情况下 % 运算符是模运算符

如规范中所述:

%(取模)运算符产生第一个参数除以第二个参数的余数。数字参数首先转换为通用类型。零右参数引发 ZeroDivisionError 异常。参数可以是浮点数,例如,3.14%0.7 等于 0.34(因为 3.14 等于 4*0.7 + 0.34。)模运算符总是产生与第二个操作数(或零)具有相同符号的结果;结果的绝对值严格小于第二个操作数的绝对值

在这种情况下,您将在除法中找到余数n / x

您的代码示例从 迭代n=2n=9。对于每个n,内部循环检查所有n大于 1 的除数。对于每个除数,它打印出一行显示 的因式分解n

于 2013-08-14T04:46:02.933 回答
1

对于数字,它是模运算符。对于字符串,它是“字符串插值”(或“字符串格式化”)运算符。

代码中的具体习语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 也是一个有趣的例子。甚至更是如此。

于 2013-08-14T04:59:36.633 回答
0

% 是模运算符:它将返回基本上是整数除法运算的余数。5 % 2 = 1, 5 % 5 = 0, 等等。在常规整数数学中,所有结果都向下舍入,因此 5 / 2 将返回 2,即使两个适合 5 个 2.5 倍。当然 0 是一种特殊情况,在大多数语言中具有未定义的行为。

于 2013-08-14T04:40:40.357 回答
-1

在算术中,如果你使用一组实数(或有理数),然后除以 ,1/2你可以得到0.5答案。现在,如果您限制自己只使用整数,1/2将返回0,因为在整数中,1不能被 整除2。那么,进行整数除法的一种方法是执行长除法,将结果的整数部分存储为整数除法的结果,并且为了不丢失任何数据,还存储余数,这是%运算符返回的.

在 Python 中,当您执行标准除法时/,您实际上是在执行浮点除法(因此可以表示分数),因此1/2 = 0.5. 现在,如果您使用整数除法//,那么1//2 = 0. 为了获得这个值,python 简单地执行标准除法,并取结果的地板。如果您要在纸上手动写出除法算法,您会注意到该除法的余数为1. 模%运算符只是返回这个余数。

所以,1/2 = 0.51//2 = 01%2 = 1

换句话说,%返回的余数与进行长除法时获得的余数相同。

     _0_ <-- result of (1//2)
   2| 1
     -0
     ---
      1 <- remainder, result of (1 % 2)
于 2013-08-14T04:50:06.330 回答