#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 был моей работой, так как я не мог понять, как его исключить! Спасибо вам за мудрость.