Объединить два цикла for в один цикл for - PullRequest
0 голосов
/ 10 октября 2018

Цель этого кода - определить, является ли число простым или нет, и, если это не так, печатает числа, на которые можно разделить данное число.

Мой вопрос: Возможно ли объединить два цикла 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.')

Ответы [ 4 ]

0 голосов
/ 10 октября 2018

Исходя из данных ответов, лучший способ изменить код таков:

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

0 голосов
/ 10 октября 2018

Второй цикл 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)
0 голосов
/ 10 октября 2018

Это следует сделать, например, с 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].
0 голосов
/ 10 октября 2018

Поскольку вы уже сконструировали 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.')
...