Python 而循环不';不读取条件
我正在尝试制作一个程序,当它从一个范围中得到5个素数时,该程序将停止。 我已经完成了大部分的程序,除了那部分,它应该停止后,它得到5个数字。 我已经为它添加了一个停止的条件,一旦计数器达到5,但它不会停止并继续列出范围内的所有数字。 以下是我的代码:Python 而循环不';不读取条件,python,loops,while-loop,Python,Loops,While Loop,我正在尝试制作一个程序,当它从一个范围中得到5个素数时,该程序将停止。 我已经完成了大部分的程序,除了那部分,它应该停止后,它得到5个数字。 我已经为它添加了一个停止的条件,一旦计数器达到5,但它不会停止并继续列出范围内的所有数字。 以下是我的代码: condition = 0 while condition < 5: for numbers in range(2,20): for divisor in range(2,numbers): if (numbe
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
条件=0
当条件<5时:
对于范围(2,20)内的数字:
对于范围内的除数(2,数字):
如果(数字%除数)==0:
打破
其他:
打印(数字)
条件+=1
条件+=1永远不会通过,它列出了从1到20的所有素数,即使我只想要前5个
我尝试过使用“条件+=1”的间距选项,但仍然不起作用
如果
超出了
的循环,您将不胜感激,因此显然无法工作。一个简单的解决方案是稍后检查所需的条件:
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)
def为素数(x):
如果x是素数,则返回true,否则返回false
#实施我!
返回真值
def get_first_n_素数_小于_y(n,y):
数字=2
条件=0
而条件!=n和数量
上面的代码经过一些调整后可以执行相同的任务。然而,这样的代码更易于调试和推理,因为我们已经隔离了代码块(is_prime,与while循环无关)问题是,在再次测试条件之前,需要运行while块的全部内容 这是一条绕道
条件=0
数字=2
当条件<5且数量<20时:
对于范围内的除数(2,数字):
如果(数字%除数)==0:
打破
其他:
打印(数字)
条件+=1
数字+=1
你总是在处理2到20范围内的所有数字,并且你要做5次……while块的全部内容一次又一次地运行到完成,直到达到while条件……所以,你说的是移动“condiiton+=1”更多?如果你想找到2到20范围内的前5个数字(顺便说一句,这是一个冗余条件;你只想找到前5个素数,句号),那么你需要中断你的。。在条件
达到5
后的循环中。您根本不需要在
时包装。是否会中断
而不跳过for循环中的else
。只有在未发生中断
时,才会执行else
。
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