在Python 3中的For循环中,右边界是包含的还是互斥的



我在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)

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

%运算符得到余数。所以如果你做5%2,结果相当于如果你用5除以2得到2,剩下1,所以5%2=>1。

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上运行一次。等等。

最新更新