将两个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