Почему этот список не показывает мне простые числа

#python #python-3.x #list #foreach

#python #python-3.x #Список #foreach

Вопрос:

Я тренируюсь со списками, я составляю список чисел, а затем добавляю только простые числа из этого списка в другой, и все в порядке, пока я не дойду до той части кода, где я хочу подтвердить, что число простое, я не делаю, если чего-то не хватает, вотэто мой код:

 List = []
Primes = []
x = 0
for i in range(0,6):
    List.append(int(input()))

flag = False
for e in List:
    print(e)
    for div in range(2,e):
        if e%div == 0:
            flag = True
    if flag == False:
        Primes.append(e)
        
        
print(List)
print(Primes)
  

И я получаю этот вывод:

 [1, 42, 5, 8, 7, 56, 2, 34]
[]
  

Комментарии:

1. Вы должны сбросить значение flag внутри первого for цикла. Также обратите внимание, что 1 не является простым (ваш код будет думать, что это так).

2. Спасибо за ответ и рекомендации, очень ценю это

Ответ №1:

кажется, это работает:

 List = []
Primes = []
x = 0
for i in range(0,6):
    List.append(int(input()))


for e in List:
    flag = False
    #print(e)
    if e == 1:
      print("1 is neither prime nor composite")
    else:
      for div in range(2,e):
         if e%div == 0:
            flag = True
      if flag == False:
         Primes.append(e)
        
        
print(List)
print(Primes)
  

проблема заключалась в том, что он не устанавливался flag False после каждого теста

также обратите внимание, что большинство людей считают 1 не простым и не составным, поэтому я добавил это и туда

Ответ №2:

это даст вам ваши простые числа из списка:

 from math import sqrt
from itertools import count, islice

l = range(6)

def is_prime(n):
    return n > 1 and all(n % i for i in islice(count(2), int(sqrt(n)-1)))

primes = [i for i in l if is_prime(i)]