在这三种情况下,计算结果有何不同?

时间:2015-06-15 03:37:17

标签: python for-loop while-loop break

代码1:

iteration = 0

count = 0

while iteration < 5:

    for letter in "hello, world":

        count += 1

    print "Iteration " + str(iteration) + "; count is: " + str(count)

    iteration += 1

代码2:

iteration = 0

while iteration < 5:

    count = 0

    for letter in "hello, world":

        count += 1

    print "Iteration " + str(iteration) + "; count is: " + str(count)

    iteration += 1

代码3:

iteration = 0

while iteration < 5:

    count = 0

    for letter in "hello, world":

        count += 1

        if iteration % 2 == 0:

            break

    print "Iteration " + str(iteration) + "; count is: " + str(count)

    iteration += 1

3 个答案:

答案 0 :(得分:2)

对于代码1 ,您将继续添加计数。因此在第一次迭代期间,计数变为12(“hello,world”的长度为12),然后在第二次迭代期间,您永远不会将计数重置为0,因此计数会持续添加,直到达到24,因为它再加上“你好,世界”的长度(12 + 12 = 24)。

0 + len("hello, world") = 12

12 + len("hello, world") = 24

and so forth

对于代码2 ,每次都会将count重置为0。这意味着计数总是等于12,因为“你好,世界”的长度是12。

0 + len("hello, world") = 12

reset to 0 

0 + len("hello, world") = 12

and so forth

对于代码3 ,每次迭代为偶数时都会中断。这意味着对于迭代0,2和4,迭代返回值1,因为在for循环开始时将1添加到迭代。但是在奇数迭代期间,计数是12,因为程序没有突破for循环并且增加了“hello,world”的长度,即12。

count = 0

For loop
     "h" in "hello, world"

     Add 1, 0 -> Is it even or odd? Even, Do not add len("ello, world") to count

1

count = 0

For loop
     "h" in "hello, world"

     Add 1, 0 -> Is it even or odd? Odd, Do add len("ello, world") to count

12

答案 1 :(得分:1)

代码1:

您的计数设置在while循环之外,因此它不会受到影响,因此会增加12 len(hello, world) = 12

代码2:

您的计数在while循环内,因此它仅在每次迭代时重置。这就是为什么count = 12保持不变的原因Iteration在循环之外会增加。

代码3:

当你的Iteration是偶数时,代码在第一次计数后就会中断。当它很奇怪时,它会很好地运行代码。

答案 2 :(得分:0)

在每次迭代期间的代码1中,您将count的值添加到前一个值。在代码2中,在每次迭代开始时,您将重新分配count = 0。在每次迭代中,在执行for循环之后,将12添加到先前的count值,在代码2的情况下,始终为0。因此,在这两种情况下,计数值都是不同的。

在情况3中,执行for循环后,计数值将为1(如果迭代值为偶数)或12(如果迭代值为奇数)。这是因为检查i%2的if条件。因此,在情况3中,对于奇数和偶数,计数值是不同的。并且因为在每次迭代期间您重新分配count = 0,所有奇数的计数值为12,所有偶数的计数值为1.