我试图用自己的方式来解决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,请帮我改进:)。
答案 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
的条件为假,则从c
和b
中扣除1。此推断将持续到条件:a**2 + b**2 == c**2
满足(true)并因此break
执行或内部while
循环标头中的条件变为false。
if product > 0:
break
显然,只要product
大于0,就打破外循环。