Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 而循环不';不读取条件_Python_Loops_While Loop - Fatal编程技术网

Python 而循环不';不读取条件

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

我正在尝试制作一个程序,当它从一个范围中得到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
条件=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