在Python中循环退出

时间:2013-05-20 18:50:13

标签: python loops while-loop

在下面的代码中,我希望while + a + b = c1000循环退出。但是,使用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

6 个答案:

答案 0 :(得分:7)

while循环仅在控件返回时才匹配条件,即完全执行for循环时。所以,这就是为什么你的程序即使满足条件也不会立即退出。

但是,如果abc的任何值都未满足条件,那么您的代码将以无限循环结束。

你应该在这里使用一个函数,因为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/excepraise进行换行。

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