#python-3.x
#python-3.x
Вопрос:
Итак, прежде всего, я понимаю, что есть гораздо более простые способы получить список простых чисел, но я делаю это просто для того, чтобы научиться. У меня очень плохое понимание многого из этого (как вы увидите), поэтому извините, если это глупый вопрос. Я пытаюсь учиться.
#make an empty list to store primes in
primes = list()
#make a variable to easily change the amount of numbers I test for primality
high_val = 15
#Allocate a range that I will test all numbers in for primality
for n in range(2, high_val):
#Within the previous for loop, start another for loop to test every integer against every
#value inside the primes list
for p in primes:
if n % p == 0:
print(%s is not prime" % n)
else:
#If n is prime, I add it to the list and print that it is prime
primes.append(n)
print("%s is a prime" % n)
Я не знаю, затрудняют ли эти комментарии чтение, но такова моя логика. Для функции нет вывода на печать. Итак, я решил, что в простых числах просто нет значения, мне нужно дать ему что-то для сравнения. Итак, я добавил primes.append(2) в начале сразу после первой строки и изменил диапазон на (3, high_val)…
Если я это сделаю, в итоге будет напечатано около 5 раз для каждого числа, которое является простым, и еще 5 сообщений о том, что оно не является простым. Очевидно, что я делаю что-то совершенно неправильное, если кто-нибудь знает, где я ошибся и / или как это исправить, это было бы очень ценно. Спасибо!
Комментарии:
1. если
primes
это пустой список, зачем вы перебираете его?2. Я полагал, что первая итерация найдет 0 терминов в списке, в результате чего он будет думать, что первый член, 2, является простым. Это не дало никаких результатов, но, как я уже сказал, когда я добавил 2 в список простых чисел, он был еще более испорчен, если вообще что-либо.
Ответ №1:
Дело в том, что вам не хватает некоторых флагов: вы печатаете, является ли число простым, каждый раз, когда вы сравниваете его с другим числом. Вы должны печатать это только после перебора всех простых чисел.
По этому поводу рассмотрите возможность использования all
:
primes = [2]
high_val = 15
for n in range(3, high_val, 2):
if all(n % p == 0 for p in primes):
print(f"{n} is prime")
primes.append(n)
else:
print(f"{n} is not prime")
ps: Я это не тестировал.