在下面的代码中,我希望while
+ a
+ b
= c
时1000
循环退出。但是,使用print
语句进行测试表明它只会持续到for
循环完成。我已尝试while True
,然后在if
语句集False
中,但这会导致无限循环。我想使用x = 0
然后设置x = 1
可能会有效,但这也会一直运行直到for
循环结束。什么是最优雅,最快速的退出方式?感谢。
a = 3
b = 4
c = 5
x = 0
while x != 1:
for a in range(3,500):
for b in range(a+1,500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
x = 1
答案 0 :(得分:7)
while
循环仅在控件返回时才匹配条件,即完全执行for
循环时。所以,这就是为什么你的程序即使满足条件也不会立即退出。
但是,如果a
,b
,c
的任何值都未满足条件,那么您的代码将以无限循环结束。
你应该在这里使用一个函数,因为return
语句可以满足你的要求。
def func(a,b,c):
for a in range(3,500):
for b in range(a+1,500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
return # causes your function to exit, and return a value to caller
func(3,4,5)
除了@Sukrit Kalra的answer,他使用退出标志,如果你的程序在该代码块之后没有任何代码,你也可以使用sys.exit()
。
import sys
a = 3
b = 4
c = 5
for a in range(3,500):
for b in range(a+1,500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
sys.exit() #stops the script
sys.exit
上的帮助:
>>> print sys.exit.__doc__
exit([status])
Exit the interpreter by raising SystemExit(status).
If the status is omitted or None, it defaults to zero (i.e., success).
If the status is numeric, it will be used as the system exit status.
If it is another kind of object, it will be printed and the system
exit status will be one (i.e., failure).
答案 1 :(得分:3)
如果您不想创建一个函数(在这种情况下您应该参考Ashwini的答案),这是一个替代实现。
>>> x = True
>>> for a in range(3,500):
for b in range(a+1, 500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
x = False
break
if x == False:
break
200 375 425.0
31875000.0
答案 2 :(得分:1)
您可以将内部代码重构为函数,并使用return退出:
def inner():
for a in range(3,500):
for b in range(a+1,500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
return False
return True
while inner():
pass
查看this问题。
答案 3 :(得分:1)
问题是,即使你在a + b + c == 1000时设置x = 1,在满足该条件时也不会中断两个for循环,因此while循环不知道x == 1直到两个for循环完成。为了避免这个问题,你可以在for循环中添加显式break语句(正如Sukrit Kalra指出的那样,while循环变得不必要了。)
a = 3
b = 4
c = 5
x = 0
for a in range(3,500):
for b in range(a+1,500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
x = 1
break
if x==1:
break
答案 4 :(得分:0)
满足条件时,您可以使用try/excep
和raise
进行换行。
class FinitoException(Exception):
pass
a = 3
b = 4
c = 5
x = 0
try:
for a in range(3,500):
for b in range(a+1,500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
raise FinitoException()
except FinitoException:
return # or whatever
答案 5 :(得分:0)
您可以使用break语句:
a = 3
b = 4
c = 5
x = 0
while x != 1:
for a in range(3,500):
for b in range(a+1,500):
c = (a**2 + b**2)**0.5
if a + b + c == 1000:
print a, b, c
print a*b*c
break