6

在下面的代码中,我希望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
4

6 回答 6

7

只有当while控制返回给它时,循环才会匹配条件,即当for循环完全执行时。因此,这就是为什么即使满足条件,您的程序也不会立即退出的原因。

但是,如果,的任何值都不满足条件a,那么您的代码将最终陷入无限循环。bc

您应该在此处使用函数,因为该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 的回答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).
于 2013-05-20T18:52:37.913 回答
4

如果您不想创建一个函数(在这种情况下您应该参考 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
于 2013-05-20T18:55:35.780 回答
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

看看这个问题。

于 2013-05-20T18:53:38.550 回答
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
于 2013-05-20T18:54:03.900 回答
1

您可以使用 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
于 2016-01-25T17:44:15.363 回答
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
于 2013-05-20T18:55:07.563 回答