Python Пока L oop Найти прайм не прекращается - PullRequest
1 голос
/ 04 августа 2020
flag = 0
n = int(input('\nEnter whole number to check : '))
i = 2
while i <= (n/2):
    if (n%i) == 0:
        flag = 1
        break
if n == 1:
    print('1 is neither prime nor composite')
elif flag == 0:
    print(n,' is a prime number.')
elif flag == 1:
    print(n,' is not a prime number.')

При вводе числа> = 3 программа останавливается, а курсор продолжает бесконечно мигать. Сначала я пробую 277, затем 13, затем 5, затем 3 - ни один из них не дал результата даже через минуту.

Ввод 2 сработал.

Что-то не так с кодом.

Ответы [ 3 ]

2 голосов
/ 04 августа 2020

Ваш l oop не меняет n или i, которые являются условиями, при которых он останавливается.

Я думаю, что правильный код должен быть:

flag = 0
n = int(input('\nEnter whole number to check : '))
i = 2
while i <= (n/2):
    if (n%i) == 0:
        flag = 1
        break
    i += 1
if n == 1:
    print('1 is neither prime nor composite')
elif flag == 0:
    print(n,' is a prime number.')
elif flag == 1:
    print(n,' is not a prime number.')
1 голос
/ 04 августа 2020

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

Этот код работает:

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

В конце вы также можете проверить на номер 1. Если хотите.

0 голосов
/ 04 августа 2020

Приведенный ниже код работает:

flag = 0
n = int(input('\nEnter whole number to check : '))
i = 2
while i <= (n/2):
    if (n%i) == 0:
        flag = 1
        break
    else:
        i += 1
    
if n == 1:
    print('1 is neither prime nor composite')
elif flag == 0:
    print(n,' is a prime number.')
elif flag == 1:
    print(n,' is not a prime number.')

Это потому, что вам нужно увеличивать i на 1 после каждой итерации, иначе ваше while l oop будет работать бесконечно.

...