在Python 3的For循环中,右边界是包含边界还是排除边界?

时间:2018-07-17 12:51:52

标签: python python-3.x jupyter-notebook modulo

我正在Python中运行以下代码:

#Finding prime numbers
for n in range(2, 10):
   for x in range(2, n):
      if n % x == 0:
        print(n, 'equals', x, '*', n//x)
        break
# loop fell through without finding a factor
   else:
        print(n, 'is a prime number')

其输出如下:

2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

假设正在进行以下迭代:

n=3, x=n

n%x的值是什么?

如果它是== 0,为什么我们不知道

print(n, 'equals', x, '*', n//x)

3 个答案:

答案 0 :(得分:1)

如果您的意思是n%n的值是什么,则它为零,因为n总是可被n整除,而%是除数余数运算符。这就是为什么代码中的循环将x从2变为n-1(这就是range(2, n)所做的-它的最后一个参数不包含在内)。

答案 1 :(得分:0)

%运算符得到余数。因此,如果您执行5%2,则结果等于将5除以2得到2,剩下的1等于5%2 => 1。

答案 2 :(得分:0)

n % n的值为0。在给定的示例n=3x=n中,语句

print(n, 'equals', x, '*', n//x)

将打印

3 equals 3*1

与您的代码有关的只是它从未将n与自身进行比较。看看你的循环:

for n in range(2, 10):
    for x in range(2, n):
        ...

第一个循环从2到10,排他性,表示2到9。第二个循环从2到n,从排他性。如果为n == 2,则表示第二个循环根本不运行。如果为n == 3,则第二个循环仅在x = 2上运行一次。还有等等。