[英]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.