假设我们要查看range(2,10)。
我编写了以下代码:
for n in range(2,10):
for x in range(2,n):
if n%x == 0:
print(n,'equals',x,'*',n//x)
break
else:
print(n, "is a prime number")
以上方法可以正确检查,但也返回一个因素。
但是如果我替换break继续:
for n in range(2,10):
for x in range(2,n):
if n%x == 0:
print(n,'equals',x,'*',n//x)
continue
else:
print(n, "is a prime number")
无法再正确检查。那么,有什么更好的方法可以正确地同时检查和检查所有因素?您的回答将对我有很大帮助!
不使用break或continue,而按如下方式制作和使用布尔变量prime
。
for n in range(2,10):
prime = True
for x in range(2, n):
if n%x == 0:
print(n,'equals',x,'*',n//x)
prime = False
if prime:
print(n, "is a prime number")
另一种方法是维护每个值的因子列表,然后在最后输出所有因子:
for n in range(2, 20):
factors = []
for x in range(2, n):
if n % x == 0:
factors.append(str(x))
if (len(factors)):
print(str(n) + ' is not prime, factors are : ' + ','.join(factors))
else:
print(str(n) + ' is prime')
输出:
2 is prime
3 is prime
4 is not prime, factors are : 2
5 is prime
6 is not prime, factors are : 2,3
7 is prime
8 is not prime, factors are : 2,4
9 is not prime, factors are : 3
10 is not prime, factors are : 2,5
11 is prime
12 is not prime, factors are : 2,3,4,6
13 is prime
14 is not prime, factors are : 2,7
15 is not prime, factors are : 3,5
16 is not prime, factors are : 2,4,8
17 is prime
18 is not prime, factors are : 2,3,6,9
19 is prime