我在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=3
和x=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
上运行一次。等等。