Как мне использовать функцию внутри цикла while, пока я не получу желаемый результат?

#python

Вопрос:

 import random
u = int(input("Enter the security parameter"))
half = int(u/2)


def Prime_Check(n):

    isprime = True
    for i in range(2,int(n/2)):
        if n % i == 0:
            print("is not prime")
            isprime = False
            break
    if isprime != False:
        print("number is likely prime")
        return n

while #p is not prime
    p = (random.getrandbits(half))
    Prime_Check(p)
 

Я пытаюсь заставить цикл my while продолжаться до тех пор , пока p не станет простым , но я не уверен, как бы я сделал это с созданной мной функцией, нужно ли мне сделать что-то вроде «вернуть true» в моей функции, а затем «функция while != true»? Я не понимаю, как это реализовать .
Заранее спасибо

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

1. Вы хотите вернуть True или False из своей функции, в зависимости от того, является ли n она простой или нет. Затем используйте это в качестве условия while цикла.

2. Примечание: Научитесь правильно использовать // . Каждый раз, когда ваш код включает int(something/2) , вы действительно должны something // 2 были правильно использовать чистое int деление на этаж, а не истинное деление с плавающей запятой, к которому вы затем возвращаетесь int .

3. @ShadowRanger это точно так же, как стоимость этажа? это выглядит намного чище ! Спасибо, что выполнили ваш совет!

4. @01Cyber_cyber10: Да, // определяется как разделение по этажам (примечание: в отличие от некоторых других языков, на самом деле это этаж , а не к нулю , так 7 // 4 есть 1 , но -7 // 4 есть -2 ; вся ваша математика состоит из неотрицательных чисел, поэтому различие не имеет значения). При выполнении с int помощью s результат сохраняется int , поэтому нет риска, что математика пойдет наперекосяк из-за проблем с точностью с плавающей запятой для промежуточных значений.

5. @ShadowRanger это действительно удобно знать , спасибо, что нашли время объяснить.

Ответ №1:

Есть много вариантов, но я бы заставил вашу функцию возвращать логическое значение, а затем выйти из цикла, как только значение станет истинным. Тем временем сделайте свой цикл while всегда истинным.

 while True:
    p = (random.getrandbits(half))
    is_prime = Prime_Check(p)
    if is_prime:
        break
 

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

1. спасибо, очень помогли!

Ответ №2:

Вы хотите вернуть True или False из своей функции, в зависимости от того, является ли n она простой или нет. Затем используйте это в качестве условия while цикла.

 def Prime_Check(n):
    isprime = True
    for i in range(2,int(n/2)):
        if n % i == 0:
            print("is not prime")
            return False
    print("number is likely prime")
    return True
 

Затем,

 more_loops = True
while more_loops:
    p = (random.getrandbits(half))
    more_loops = Prime_Check(p)
 

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

1. в этом есть большой смысл , я не знал, как вернуть значение true из функции . Ценю вашу помощь.

Ответ №3:

Ты на правильном пути. Вам действительно нужно было бы создать свою функцию, которая проверяет, является ли число простым, чтобы вернуть a bool (т. Е. True или False ):

 import random
u = int(input("Enter the security parameter"))
half = int(u/2)
p = random.getrandbits(half)


def Prime_Check(n):
    for i in range(2,int(n/2)):
        if n % i == 0:
            return False
    return True


while not Prime_Check(p):
    p = random.getrandbits(half)

print(f"Found a prime!: {p}")
 

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

1. спасибо, что нашли время помочь мне!

Ответ №4:

Ваша функция Prime_check не вернет ничего, если число не является простым (или само число, если оно есть). Значение «Истинность» будет Истинным, если число простое, и ложным, если это не так, что делает вашу функцию полезной в качестве условия. Поэтому единственное изменение, которое вам нужно сделать, — это взять этот результат и использовать его для управления циклом. Начните с не простого числа, чтобы цикл прошел хотя бы один раз

 p = 4 # (non-prime) 
while not Prime_Check(p)
    p = (random.getrandbits(half))
 

Я бы использовал 1 в качестве начального непервичного, но ваша функция считает, что 1 является простым

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

1. интересный вывод , и вы совершенно правы , моя функция определяет 1 как простое число, запуск цикла for на 2 был моей работой, так как я не мог понять, как его исключить! Спасибо вам за мудрость.