簡體   English   中英

while 循環不讀取條件

[英]While loop doesn't read condition

我正在嘗試制作一個程序,當它從一個范圍內獲得 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 個。

我已經嘗試使用“條件 +=1”的間距選項,但它仍然不起作用

任何幫助,將不勝感激

While脫離了for循環,所以顯然不能工作。 一個簡單的解決方案是稍后檢查所需條件:

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

我認為您遇到的真正問題是您編寫了錯誤的代碼。 解決此問題的更好方法是隔離盡可能多的部分。

例如:

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 循環無關)

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

問題是您需要在再次測試條件之前運行 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM