Python с простыми числами для циклов

Вопрос:

Программа, которая принимает на вход положительное целое число n и возвращает True, если n - простое число, в противном случае возвращает False.

Мой ответ:

n = int(input("Enter a number: "))
for i in range(2,n):
    if n%i == 0:
        print(False)
print(True)

когда я ввожу простое число, оно работает, но когда я ввожу непростое число, оно не работает.

Пример:

>>> 
Enter a number: 12
False
False
False
False
True
>>> 

пожалуйста помоги!


person James Ocean    schedule 29.06.2015    source источник
comment
Вы имеете в виду, что не работает на неплатежеспособных клиентов?   -  person Speerian    schedule 29.06.2015
comment
вы ничего не возвращаете ... (и вам нужно только проверить до sqrt (n))   -  person Joran Beasley    schedule 29.06.2015


Ответы (10)


Вы можете break и использовать else:

n = int(input("Enter a number: "))
for i in range(2, n):
    if n % i == 0:
        print(False)
        break
else: 
    print(True)

True будет напечатан только в том случае, если цикл завершится полностью, т.е. ни один n % i не был равен 0.

person Padraic Cunningham    schedule 29.06.2015
comment
@JafarOcean, не беспокойтесь, если вы не используете функцию, это, вероятно, самый простой способ. - person Padraic Cunningham; 29.06.2015

Ваш код всегда печатает True в конце и печатает количество False перед этим. Вместо этого у вас должна быть переменная (isPrime?), Которая инициализируется значением True и получает значение False, когда вы обнаруживаете, что она на что-то делится. Затем выведите эту переменную в конце.

person Scott Hunter    schedule 29.06.2015
comment
так как это будет выглядеть? - person James Ocean; 29.06.2015

Вы просто печатаете каждое промежуточное значение, если вы используете return в функции, оно отлично работает

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

>>> prime(5)
True
>>> prime(12)
False
person Cory Kramer    schedule 29.06.2015

Вы можете использовать здесь предложение for-else. Кроме того, вам не нужно выходить за пределы квадратного корня из n:

import math

for i in range(2, int(math.sqrt(n))):
    if n % i == 0:
        print "False"
        break
else:
    print "True"
person Saksham Varma    schedule 29.06.2015

Есть много разных способов исправить ваш код, но все они зависят от того факта, что вы должны выйти из этого цикла, если найдете делитель (т.е. если n%i == 0)

Обычно у вас есть логическое значение, в котором хранится, нашли ли вы делитель или нет, но python позволяет вам делать следующее

n = int(input("Enter a number: "))
for i in range(2,n):
    if n%i == 0:
        print(False)
        break
else:
    #else statement only happens if you don't break out of the loop
    print(True)
person NightShadeQueen    schedule 29.06.2015

Ознакомьтесь с алгоритмом здесь:

http://www.programiz.com/python-programming/examples/prime-number

# Python program to check if the input number is prime or not

# take input from the user
num = int(input("Enter a number: "))

# prime numbers are greater than 1
if num > 1:
   # check for factors
   for i in range(2,num):
       if (num % i) == 0:
           print(num,"is not a prime number")
           print(i,"times",num//i,"is",num)
           break
   else:
       print(num,"is a prime number")

# if input number is less than
# or equal to 1, it is not prime
else:
   print(num,"is not a prime number")
person Dr. Cogent    schedule 29.06.2015

Если вы встретите i, который дает нулевой модуль по модулю с n, вам нужно вывести False, а затем ничего не делать. Для этого вы можете использовать переменную flag, которая заботится об этом условии. Если такой i не встречается, флаг остается 1 и печатается True.

n = int(input("Enter a number: "))
flag = 1
for i in range(2,n):
    if n%i == 0:
        print(False)
        flag = 0
        break
if flag:
    print(True)
person Naman Sogani    schedule 29.06.2015

проверьте это, он должен прояснить, почему оператор else имеет отступ "не-условным":

num = int(input('Enter the maximum value: '))

for number in range(3, num+1):
    #not_prime = False
    for factor in range(2, number):

        if number%factor == 0:
            #not_prime = True
            break
    #if not_prime:
        #continue
    else:
        print(number)
person Sébastien Wieckowski    schedule 20.09.2017

Все вышеперечисленное верно, но я хочу добавить, что вы должны проверить условие 1. Если кто-то поместит 1 как целое число, вам придется вернуть False. 1 не является простым

person thedudecodes    schedule 16.06.2019

Это один из многих способов ее решения:

def is_prime(num):
if (num == 2):
    return True
elif any(x for x in range(2, num - 1) if (num % x == 0)):
    return False
else:
    return True
person Xavier Jiménez Albán    schedule 10.03.2021