将两个for循环合并为一个for循环
Merge two for-loops into one for-loop
此代码的目标是确定一个数是否为质数,如果不是,则打印给定数可以被除以的数。
我的问题是:是否可以在下面的代码中将两个 for
循环合并为一个 for
循环?
num = 224
list1 = []
for i in range(2, num):
if num % i == 0:
list1.append(i)
for i in range(2, num):
if num % i == 0:
print(num, 'is not prime and can be divided by the following numbers:\n', list1)
break
else:
print(num, 'is Prime.')
由于您已经在第一个循环中使用所有除数构建了 list1
,您可以在条件中使用它,而不是第二次迭代相同的序列:
for i in range(2, num):
if num % i == 0:
list1.append(i)
if list1:
print(num, 'is not prime and can be divided by the following numbers:\n', list1)
else:
print(num, 'is Prime.')
不需要第二个for循环
num = 224
list1 = []
for i in range(2, num):
if num % i == 0:
list1.append(i)
if (not list1):
print(num, 'is Prime.')
else:
print(num, 'is not prime and can be divided by the following numbers:\n', list1)
这应该可以做到,例如 10 个数字:
n = 10
for i in range(2, n + 1):
divisors = []
for j in range(2, i):
if i % j == 0:
divisors.append(j)
if divisors:
print('{} is not prime and can be divided by the following numbers: {}.'.format(i, divisors))
else:
print('{} is prime.'.format(i))
输出:
2 is prime.
3 is prime.
4 is not prime and can be divided by the following numbers: [2].
5 is prime.
6 is not prime and can be divided by the following numbers: [2, 3].
7 is prime.
8 is not prime and can be divided by the following numbers: [2, 4].
9 is not prime and can be divided by the following numbers: [3].
10 is not prime and can be divided by the following numbers: [2, 5].
根据给定的答案,重新设计代码的最佳方法是:
num = 224
list1 = [i for i in range(2, num) if num % i == 0]
if list1:
print(num, 'is not prime and can be divided by the following numbers:\n', list1)
else:
print(num, 'is Prime.')
谢谢@matthieu-brucher 和@blhsing
此代码的目标是确定一个数是否为质数,如果不是,则打印给定数可以被除以的数。
我的问题是:是否可以在下面的代码中将两个 for
循环合并为一个 for
循环?
num = 224
list1 = []
for i in range(2, num):
if num % i == 0:
list1.append(i)
for i in range(2, num):
if num % i == 0:
print(num, 'is not prime and can be divided by the following numbers:\n', list1)
break
else:
print(num, 'is Prime.')
由于您已经在第一个循环中使用所有除数构建了 list1
,您可以在条件中使用它,而不是第二次迭代相同的序列:
for i in range(2, num):
if num % i == 0:
list1.append(i)
if list1:
print(num, 'is not prime and can be divided by the following numbers:\n', list1)
else:
print(num, 'is Prime.')
不需要第二个for循环
num = 224
list1 = []
for i in range(2, num):
if num % i == 0:
list1.append(i)
if (not list1):
print(num, 'is Prime.')
else:
print(num, 'is not prime and can be divided by the following numbers:\n', list1)
这应该可以做到,例如 10 个数字:
n = 10
for i in range(2, n + 1):
divisors = []
for j in range(2, i):
if i % j == 0:
divisors.append(j)
if divisors:
print('{} is not prime and can be divided by the following numbers: {}.'.format(i, divisors))
else:
print('{} is prime.'.format(i))
输出:
2 is prime.
3 is prime.
4 is not prime and can be divided by the following numbers: [2].
5 is prime.
6 is not prime and can be divided by the following numbers: [2, 3].
7 is prime.
8 is not prime and can be divided by the following numbers: [2, 4].
9 is not prime and can be divided by the following numbers: [3].
10 is not prime and can be divided by the following numbers: [2, 5].
根据给定的答案,重新设计代码的最佳方法是:
num = 224
list1 = [i for i in range(2, num) if num % i == 0]
if list1:
print(num, 'is not prime and can be divided by the following numbers:\n', list1)
else:
print(num, 'is Prime.')
谢谢@matthieu-brucher 和@blhsing