为什么有必要打破这个例子呢?

时间:2017-04-26 12:58:13

标签: python

我试图用自己的方式来解决a,b,c的乘积,找到a + b + c = 1000和a ^ 2 + b ^ 2 = c ^ 2.

我自己最终找到了这个方法,但它引出了另一个关于这个东西是如何工作的问题。

a= 1
b= 2
c= 997
product = 0

while a < 333:
    while c > b:
        if a**2 + b**2 == c**2:
            product = a * b * c
            break
        else:
            c += -1
            b += 1
    else:
        a += 1
        b = a + 1
        c = 1000 - a - b
    if product > 0:
        break

print (product)

我的第一次尝试不包括

if product > 0:
    break

出于某种原因,我的代码无法完成并永远运行。所以我决定在它工作的最后添加它。那样太好了。但是,我想知道为什么那里需要休息。

在找到答案后,首先不会中断循环吗?为什么有必要在相同条件下进行第二次休息?即使没有休息,当a变为&gt;时,它不会自然地结束。 333?

我昨天刚开始学习python,请帮我改进:)。

2 个答案:

答案 0 :(得分:4)

来自文档:

  

break终止最近的封闭循环,跳过可选的else子句

这意味着只有你的内部while循环被中止,你的外部while循环将无休止地继续。

关于你的问题:

  即使没有休息,也不认为当a变为&gt;时自然结束。 333?

问题是,当你break退出内循环时,else部分没有被执行,所以你的a保持不变。在外循环的下一次运行中,再次找到解决方案,打破内循环,而不是递增a ......

答案 1 :(得分:2)

 while c > b:
        if a**2 + b**2 == c**2:
            product = a * b * c
            break
        else:
            c += -1
            b += 1

break打破内循环,就像说:我们找到了我们需要的东西,停止计算更多的值。。退出内部while循环后,外部while循环将继续循环。如果内循环内if的条件为假,则从cb中扣除1。此推断将持续到条件:a**2 + b**2 == c**2满足(true)并因此break执行或内部while循环标头中的条件变为false。

if product > 0:
    break

显然,只要product大于0,就打破外循环。