Python Prime Checker

Я недавно начал изучать python (я имею в виду, 35 минут назад во время публикации...) и я написал несколько вещей, например. генератор квадратного корня, генератор факториалов, генератор чисел Фибоначчи, средство проверки простых чисел и т. д. После того, как я написал средство проверки простых чисел, я решил попробовать изменить его так, чтобы вместо проверки каждого числа в указанном диапазоне он принимал входные данные и проверял, что один конкретно.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Если бы я лучше разбирался в Python, я бы проверял только числа до sqrt(p) и добавил бы возможность проверить, является ли оно четным, а не 2, тогда оно автоматически возвращает, что оно не простое, но позвольте мне пройти перед запуском ! :)

КОД:

p = input("Enter a potential prime.")

for n in range (2,p):
    if p % n == 0:
        print(p, "equals", n, "x", p//n, "so it isn't a prime number")
        break
else:
    print(p, "is a prime number.")

Это работает для p = 2, но это все...

NB. Очевидно, что код имеет соответствующий отступ, просто здесь он неправильно отформатирован.


person PythonNewbie    schedule 03.05.2015    source источник
comment
Для дальнейшего использования, чтобы правильно отформатировать код, скопируйте и вставьте его сюда, выделите и нажмите Control/cmd+k или нажмите кнопку, которая выглядит как { }   -  person Shashank    schedule 03.05.2015
comment
meta.stackexchange.com /вопросы/22186/   -  person jgritty    schedule 03.05.2015
comment
Хотя какой у тебя вопрос?   -  person rafaelc    schedule 03.05.2015
comment
Ваш код действительно отлично работает в Python 2.x. В Python 3.x вам нужно сначала преобразовать возвращаемое значение ввода в int. Итак, как и Рафаэль, я не уверен, в чем ваш вопрос.   -  person Shashank    schedule 03.05.2015
comment
Вот видео, которое может помочь вам написать код: youtu.be/kcuLJXF44Dw?t=1m30s   -  person jgritty    schedule 03.05.2015


Ответы (1)


Я вижу некоторые ошибки: вам нужно преобразовать пользовательский ввод в int, плюс вам нужно переместить предложение else: под цикл for, а не под оператор if. Следующий код работает для того, что вы хотите:

p = int(input("Enter a potential prime."))
for n in range (2,p):
    if p % n == 0:
        print(p, "equals", n, "x", p//n, "so it isn't a prime number")
        break
else:
    print(p, "is a prime number.")

Да, это правильно - else: НЕ является частью оператора if, это часть вашего цикла for. Этот синтаксис означает, что если ваш цикл for доходит до разрыва, он прерывается как обычно. Если разрыва нет, то будет выполнено предложение else:. Таким образом, он выполнит базовое пробное деление, и если число пройдет проверку, оно напечатает «является простым числом» только один раз. Размещенный вами код будет печатать «простое число» для каждой итерации вашего цикла.


Изменить: попробуйте следующий код для вашего дополнительного вопроса.

def primeChecker():
    # Function that keeps prompting for input, and checks if it's prime. Enter "quit"
    # to exit:
    user_input = input("Enter a potential prime (or type 'quit' to exit): ")
    if user_input == 'quit':
        return
    else:
        p = int(user_input)

    # Trial division algorithm:
    for n in range (2,p):
        if p % n == 0:
            print(p, "equals", n, "x", p//n, "so it isn't a prime number")
            break
    else:
        print(p, "is a prime number.")

    # Recursive function call:
    primeChecker()

# Start by calling the main function:   
primeChecker()
person AdmiralWen    schedule 03.05.2015
comment
Я знаю, что else является частью цикла for. У меня есть else в том же месте в моем коде... Я внес ваше исправление, спасибо! Есть ли какой-нибудь простой способ вернуть сценарий к вводу, чтобы вы могли ввести другое потенциальное простое число после проверки первого? - person PythonNewbie; 03.05.2015
comment
Почему бы не сделать основной тест рекурсивной функцией? В конце функции просто снова вызовите основную функцию. - person AdmiralWen; 03.05.2015
comment
Я бы с удовольствием, но это все равно, что сказать мне водить машину, запустив двигатель и поведя ее. Я понятия не имею, как это сделать. Я пробовал Google, но ни одна из страниц по рекурсии не является особенно информативной в общем случае, они, как правило, описывают конкретные примеры. - person PythonNewbie; 05.05.2015
comment
Я отредактировал свой ответ для того, что вам нужно. Вы можете определить функцию и вызвать функцию внутри себя (это называется рекурсией). Я не уверен, есть ли у вас другой опыт программирования; если нет, вам следует начать изучать более простые вещи, например, как работают функции, прежде чем писать рекурсивные. Я думаю, вы должны быть в состоянии понять код, просто прочитав его. - person AdmiralWen; 05.05.2015