为什么我的循环继续作为无限循环?

时间:2019-08-07 14:53:46

标签: python

我有一些代码,即使我有其他条件应该结束循环,我也很难理解为什么循环是无限循环。

server {
    listen 80 ;

    server_name     mysite.com ;
    index  index.html index.htm; 

    location / {
        root /usr/local/var/www ;
        # other opts here
    }
}

我的问题是,我有一个else语句,将add更改为'False',因此循环应该停止,但由于某种原因它不会停止。

但是,如果我对代码进行了些微改动,它将停止:

def add1(*args):
    total = 0
    add = True

    for num in args:
        while add == True:
            if num!=6:
                total = total + num
            else:
                add = False
    return total

add1(1,2,3,6,1)

基本上,添加一个休息时间。 我不了解专家级python编码员实际上如何在他们的脑海中解释“中断”。我已经阅读过一些休息时间的文章,但似乎仍然不太了解。 我不明白为什么需要“休息”,为什么“其他”不能满足需求。

4 个答案:

答案 0 :(得分:1)

当您进入SELECT * FROM [{0}A1:A111]循环时,for获得值num1中的第一个值)。然后,您进入args循环(因为while为True)。现在,由于add不等于num,因此您输入了6块,因此if块不执行。然后,您只需返回到else循环,并且while的值不变。然后,由于num不等于num(请记住它没有改变,它仍然是6),因此再次输入1块,依此类推,直到您终止程序。

添加if时,退出最近的循环,在本例中为break循环,因此while循环继续进行,直到for获得值num,而6变成add。发生这种情况时,False循环将不再执行。

答案 1 :(得分:0)

def add1(*args):
    total = 0
    add = True

    for num in args:
        if add == True:
            if num!=6:
                total = total + num
            else:
                add = False
                break      #breaking the for loop for better performance only.
    return total

add1(1,2,3,6,1)

这将增加直到没有遇到6。您不必要地使用了while循环。您必须通过某些条件来打破无限循环,而该条件是num!= 6时。即使您的其他部分也可以打破无限的while循环,但是根据我的说法,while循环本身是不必要的。

答案 2 :(得分:0)

我相信您的代码的目的是总结* args中的元素,直到出现第6个数字为止。如果是这种情况,则while循环在这里是多余的。更改第一个代码段:

def add1(*args):
    total = 0

    for num in args:
        if num != 6:
            total = total + num
        else:
            break
    return total


add1(1, 2, 3, 6, 1)

原始代码中实际发生的是,在while循环中迭代时, num 变量没有任何变化,因此它永远不会进入else部分,从而有效地卡在了第一个输入上参数不是6,请参见下文:

def add1(*args): # [1, 2, 3, 6, 1]
    total = 0
    add = True

    for num in args:  # first element is 1. num = 1
        while add == True:
            if num != 6:  # num = 1 always
                total = total + num
                # adding break here gets out of the while loop on first iteration, changing num = 2
                # and later to 3, 6...
            else:  # else is never reached
                add = False
    return total


add1(1, 2, 3, 6, 1)

答案 3 :(得分:-1)

您应更改以下代码:

来自

if num != 6:

if total != 6: