Python: isPrime функция будет печатать слишком много ответов
-8
0
Проблема в том, что мой код печатает
"The number you entered is prime"
много раз в зависимости от числа, которое я вводил, а затем
"That number is not prime"
если число не является простым. Я знаю, ПОЧЕМУ это делает это (потому что оператор if продолжает цикл с циклом for, пока не найдет число, которое разделяет равномерно, затем печатает результат "не простой"), но вопрос, который я задаю, - это КАК Я почини это?
def isprime(n):
try:
npnc = "Neither prime nor composite"
if isinstance(n, complex) == True:
print("Sorry, trial division doesn't like negative numbers. Try again.")
elif n == 0:
return npnc
elif n == 1:
return npnc
else:
for m in range(2, (int(n**.5)+1)):
if n%m == 0:
print("That number is not prime")
break
elif n%m > 0:
print("The number you entered is prime")
Примечание. У него есть "кроме ValueError", который я не включил.
спросил(а)
2021-01-19T16:38:59+03:00
2 месяца, 3 недели назад
добавить комментарий
пожаловаться
Решение
61
Вы можете использовать для for..else
в этой ситуации. Если вы не выходите из цикла, программа выполняет часть else
после for
.
for m in range(2, (int(n**.5)+1)):
if n%m == 0:
print("That number is not prime")
break
else:
print("number is prime")
идентична:
found = False
for m in range(2, (int(n**.5)+1)):
if n%m == 0:
print("That number is not prime")
found = True
break
if not found:
print("number is prime")
ответил(а)
2021-01-19T16:38:59+03:00
2 месяца, 3 недели назад
добавить комментарий
пожаловаться
44
Используйте это в своей функции - декомпозиция задачи всегда приятная, и в этом случае она позволяет ранние возвращения:
def isprime_impl(n):
for m in range(2, (int(n**.5)+1)):
if n%m == 0:
return False
return True
ответил(а)
2021-01-19T16:38:59+03:00
2 месяца, 3 недели назад
добавить комментарий
пожаловаться
Ваш ответ