Основная функция не возвращает правильный результат - PullRequest
0 голосов
/ 24 сентября 2019

Я написал фрагмент кода, чтобы проверить, является ли число простым или нет.Он работает в Powershell, но не работает на платформе онлайн-отправки.

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

x = int(input('Please enter a number: '))

if x > 1:
    for i in range(2, x):
        if (x % i) == 0:
            print('The number you inputted is not a prime number.')
            break
        else:
            print('The number you inputted is a prime number.')
            break
else:
    print('The number you inputted is not a prime number.')

Следует распечатать, является ли число простым или нет.

Ответы [ 6 ]

1 голос
/ 24 сентября 2019

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

x = int(input('Please enter a number: '))

for i in range(2, int(x ** .5) + 1):
    if x % i == 0:
        print('The number you inputted is not a prime number.')
        break
else:
    print('The number you inputted is a prime number.')
0 голосов
/ 24 сентября 2019

Я хотел бы предложить более питонический способ:

x = int(input('Please enter a number: '))
if x<2:
    print('The number you inputted is not a prime number.')
elif x==2:
    print('The number you inputted is a prime number.')
else:
    y = range(2,x)
    mod = map(lambda a:divmod(x,a)[1],y)
    if all(mod):
        print('The number you inputted is a prime number.')
    else:
        print('The number you inputted is not a prime number.')
0 голосов
/ 24 сентября 2019

Решение

Вот решение, смоделированное после того, как вы попробовали код.Обратите внимание, что иногда, если вы копируете код с определенных веб-сайтов, вы можете столкнуться с проблемами форматирования кода / проблемами с отступами.Например, когда я скопировал похожий кодовый блок с programiz.com: простое число , оно неоднократно возвращало ошибку отступа.Единственный способ, которым я мог бы обойти это, - это ручная печать логики кода.

Возможно, можно попытаться исправить это, скопировав код в простой текстовый редактор (например, блокнот), а затем вставив его в IDE, которую вы используете.

def is_prime(num):

    isprime = False
    # prime numbers are greater than 1
    if (num>1):
        for i in range(2,num):
            # check if divisible by any number
            # other than itself and 1
            if (num % i) == 0:
                isprime = False
                break
            # Not divisible by any number 
            # other than itself and 1
            else:
                isprime = True
    # numbers 0 and 1 are not prime numbers
    else:
        isprime = False

    return isprime

is_prime(31), is_prime(42)

Выход :

(True, False)
0 голосов
/ 24 сентября 2019
x = int(input('Please enter a number: '))

if x > 1:
    for i in range(2, x):
        if (x % i) == 0:
            print('The number you inputted is not a prime number.')
            break
    else:
        print('The number you inputted is a prime number.')

else:
    print('The number you inputted is not a prime number.')

Это исправление сработало!

0 голосов
/ 24 сентября 2019

Как насчет удаления этого оператора else?Вам действительно нужно проверить все числа 2 ... (k-1)

x = int(input('Please enter a number: '))

if x > 1:
    is_prime = True
    for i in range(2, x - 1):
        if (x % i) == 0:
            is_prime = False
            break
    if is_prime:
        print('The number you inputted is a prime number.')
    else:
        print('The number you inputted is not a prime number.')

else:
    print('The number you inputted is not a prime number.')
0 голосов
/ 24 сентября 2019

Ну, во-первых, вы должны удалить самое внутреннее условие else.

Подумайте, например, о x = 9.Поток управления войдет в предложение for, начиная с i = 2.Он проверит, если x% i == 0, то есть, если x делится на i.Это не так.Затем вы переходите к пункту else.Печатает, что «Введенное вами число является простым числом» и разрывается, завершая цикл for.Это не то, что вы хотите.

Вы только заключаете, что число простое после просмотра, если оно делится на все я.То есть вы хотите, чтобы код, заключающий, что число простое (печать («Введенное вами число - простое число»)) должно находиться за пределами цикла for.

В целом необходимы некоторые настройки.Вот рабочее решение:

x = int(input('Please enter a number: '))

if x > 1:
    for i in range(2, x):
        if (x % i) == 0:
            print('The number you inputted is not a prime number.')
            break
    if i==x-1:
            print('The number you inputted is a prime number.')
else:
    print('The number you inputted is not a prime number.'
...