Python: isPrime функция будет печатать слишком много ответов

-8

Проблема в том, что мой код печатает

"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 недели назад
1
Решение
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 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема