#python #for-loop #while-loop
Вопрос:
У меня есть приведенный ниже скрипт, который возвращает каждое число, указывающее, простое оно или нет, и спрашивает пользователя, хотят ли они видеть следующее число в последовательности. Я хочу внести изменения, чтобы скрипт не создавал инструкцию печати для не простых чисел, а вместо этого пропускал их и возвращал только следующее простое число, после чего спрашивал, хочет ли пользователь увидеть следующее простое число.
Вот мой код:
def prime_number():
game_on = True
count = 3
while True:
for num in range(2, count):
if (count % num) == 0:
print(count,"is not a prime number")
break
else:
print(count,"is a prime number")
question = input("Would you like to see another prime number?? Please enter Yes or No: ")
if question[0].lower() == "y":
count = count 1
continue
return
Когда я запускаю это и несколько раз выбираю «Да», я получаю следующее. Я хочу полностью пропустить не простые числа и избавиться от не простых операторов печати, приведенных ниже. Я попробовал несколько способов игнорировать не простые числа в приведенном выше цикле while, но до сих пор это не работало.
3 is a prime number
Would you like to see another prime number?? Please enter Yes or No: Yes
4 is not a prime number
Would you like to see another prime number?? Please enter Yes or No: Yes
5 is a prime number
Would you like to see another prime number?? Please enter Yes or No: Yes
6 is not a prime number
Would you like to see another prime number?? Please enter Yes or No:
Комментарии:
1. «и вместо этого пропускает их и возвращает только следующее простое число» — Что именно вы
next
здесь имеете в виду?
Ответ №1:
Еще одно предложение, близкое к вашему:
def prime_number():
number = 3
while True:
if all(number % num != 0 for num in range(2, number)):
print(f"{number} is a prime number")
response = input("Would you like to see another prime number?? Please enter Yes or No: ")
if response[0].lower() == "n":
return
number = 1
Замечания:
- С чего бы начинать
3
?2
это первое простое число. - Существуют более эффективные способы вычисления простых чисел (например, вы могли бы проверить только до
sqrt(number)
), но я не хотел менять ваш алгоритм. Я сомневаюсь, что это действительно имеет значение для данного варианта использования.
Комментарии:
1. Никакой конкретной причины, начиная с 3. Мне просто нужно было закодировать сценарий, чтобы дать следующее по величине простое число независимо от начальной точки. Спасибо за вышесказанное, это работает очень хорошо.
Ответ №2:
Вы пробовали создать список, а затем выполнить цикл для в диапазоне, добавив каждое простое число в список, а затем выполнить цикл по списку, напечатав все простые числа до заданного числа.
Ответ №3:
О, я понимаю. Ты можешь просто сделать это:
def next_prime(n):
while True:
for denom in range(2, n//2):
if n % denom == 0:
n = 1
break
else:
return n
def prime_number():
game_on = True
p = 2
while True:
p = next_prime(p 1)
print(p)
question = input("Would you like to see another prime number?? Please enter Yes or No: ")
if question[0].lower() == "y":
continue
return