Измените сценарий, чтобы перестать возвращать не простые числа и возвращать только простые числа

#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
 

Замечания:

  1. С чего бы начинать 3 ? 2 это первое простое число.
  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