Пока l oop не читает условие - PullRequest
0 голосов
/ 21 января 2020

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

condition = 0
while condition < 5:
  for numbers in range(2,20):
      for divisor in range(2,numbers):
        if (numbers % divisor) == 0:
          break
      else:
        print(numbers)
        condition +=1

Условие + = 1 никогда не выполняется, и в нем перечислены все простые числа от 1 до 20, хотя я просто хочу первые 5.

I ' мы пробовали варианты интервалов с условием "+ 1", но оно все равно не работает

Любая помощь будет признательна

Ответы [ 4 ]

2 голосов
/ 21 января 2020

While вне for l oop, поэтому не может работать очевидно. Простое решение - проверить требуемое условие позже:

for numbers in range(2,20):
  for divisor in range(2,numbers):
    if (numbers % divisor) == 0:
      break
  else:
    print(numbers)
    condition +=1
    if condition >=5:
        break
0 голосов
/ 21 января 2020

Проблема в том, что вам нужно запустить все содержимое блока while, прежде чем снова проверять условие.

Вот способ

condition = 0
numbers=2
while condition < 5 and numbers < 20:
    for divisor in range(2,numbers):
        if (numbers % divisor) == 0:
            break
    else:
        print(numbers)
        condition +=1
    numbers+=1
0 голосов
/ 21 января 2020
num_results = 5
counter = 0


range_start = 2
range_end = 20

# iterate range
for number in range (range_start, range_end):

    # iterate divisors
    for divisor in range (2, number):

        # check division
        if (number % divisor) == 0:
            break
        else:
            print ("%s is a prime number" % number)
            counter += 1
            break

        # check if number of results has been reached
        if counter == num_results:
            break
    # check if number of results has been reached
    if counter == num_results:
        break
0 голосов
/ 21 января 2020

Я думаю, что проблема real в том, что вы написали неверный код. Гораздо лучший подход к этой проблеме состоит в том, чтобы выделить как можно больше фрагментов.

например:

def is_prime(x):
    "return true if x is prime, otherwise false"
    # implement me!
    return True

def get_first_n_primes_less_than_y(n, y):

    number = 2
    condition = 0

    while condition != n and number < y:
       if is_prime(number):
           print(number)
           condition += 1

       number += 1

get_first_n_primes(5, 20)

Приведенный выше код с некоторыми изменениями может выполнить ту же задачу. Тем не менее, такой код гораздо проще отлаживать и рассуждать, потому что у нас есть отдельные куски кода (is_prime, не имеет ничего общего с while l oop)

...