6

while以下のコードでは、ループが ++ = とすぐに終了するaようbにしたいと思いcます1000printただし、ステートメントを使用したテストでは、forループが完了するまで続行されることが示されています。私はステートメントセットで試してみましたがwhile True、それは無限ループになります。使用してから設定するとうまくいくと思いましたが、それもループが終了するまで実行されます。終了するための最も優雅で最速の方法は何ですか? ありがとう。ifFalsex = 0x = 1for

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ただし、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の答えとは別に、彼は終了フラグを使用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

問題は、a+b+c==1000 のときに x=1 を設定しても、その条件が満たされたときに 2 つの for ループから抜け出せないため、while ループは x== を認識しないことです。両方の for ループが終了するまで 1。この問題を回避するには、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

内部コードを関数にリファクタリングし、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 に答える
0

条件が満たされたときにtry/excepand でラップできます。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 に答える