Этот код имеет смысл? Простые числа в Python - PullRequest
0 голосов
/ 05 июля 2018
def prime_checker(num):
    if num <=1:
        print('Not Prime')
    elif num == 2:
        print('Prime')
    else:
        for i in (2, (num ** (1/2))):
                if num%i == 0:
                    print('Not Prime')
                    break
                else:
                    print('Prime')
                    break

Я очень новичок в программировании, просто изучаю основы. Я основал его на тесте первичности, который я нашел в Википедии.

Я думаю, что это работает. Это может быть громоздким, но, кажется, работает.

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

Ваша логика хороша, однако вы могли бы использовать sqrt для корневого квадрата, также функция range повысит значение TypeError, если вы предоставите параметр float (что обычно имеет место при работе с корневым квадратом).

Рабочая реализация будет:

from math import sqrt

def prime_checker(num):
    is_prime = True
    if num <= 1 or not isinstance(num, int):
        is_prime = False
    elif num == 2:
        pass
    else:
        for i in range(2, int(sqrt(num)) + 1):
            if num % i == 0:
                is_prime = False
                break
    if is_prime:
        print('Prime')
    else:
        print('Not Prime')
0 голосов
/ 06 июля 2018

Я думаю, что это работает не как функция.

from math import sqrt

print('This script will check if your input is a prime number.')

num = int(input('Number: '))

if num <=1:
    print('Not Prime')
elif num == 2 or num ==3:
    print('Prime')
else:
    for i in range(2, int(sqrt(num)) + 1):
        if num%i == 0:
            a = 'Not Prime'
            break
        else:
            a = 'Prime'

    print(a)
0 голосов
/ 05 июля 2018

Итератор для вашего цикла for должен представлять собой диапазон целых чисел, а не просто кортеж из 2 и квадратный корень из числа. При использовании range обязательно сначала преобразуйте границы в целые числа с int. И это считается простым числом, если число не может быть разделено ни на одно из чисел в цикле, поэтому вы должны объявлять простое число только после окончания цикла, иначе цикл должен объявить «не простое» и вернуть.

def prime_checker(num):
    if num <=1:
        print('Not Prime')
    elif num == 2:
        print('Prime')
    else:
        for i in range(2, int(num ** (1/2)) + 1):
            if num%i == 0:
                print('Not Prime')
                return
        print('Prime')

prime_checker(63)
prime_checker(31)
prime_checker(9)

Это выводит:

Not Prime
Prime
Not Prime
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...