ホームページ >バックエンド開発 >Python チュートリアル >Python の for および Break ループ構造での else ステートメントの使用

Python の for および Break ループ構造での else ステートメントの使用

高洛峰
高洛峰オリジナル
2017-03-02 16:09:172774ブラウズ

通常、if 構造で else ステートメントを使用するのは当然のことですが、Python の強力な構文により、Python の for ループと while ループの構造を見てみましょう。 . else ステートメントを使用するためのヒント

Python では、while または for ループの後に else 句を置くこともできます。その機能は、for ループ内の条件が満たされない場合に、最後に else ステートメントが実行されるというものです。

for i in range(5):
 if i == 1:
  print 'in for'
else:
 print 'in else'

print 'after for-loop'

# in for
# in else
# after for-loop

しかし、ループ中に if 条件が成立し、最終的に else ステートメントの内容が実行されることがわかりました。これはなぜでしょうか。

それでは、次のプログラムを見てみましょう:

for i in range(5):
 if i == 1:
  print 'in for'
  break
else:
 print 'in else'

print 'after for-loop'


# in for
# after for-loop

if にブレークを追加しました。これは、else が for の後に実行されるためですが、これは for ループが正常に終了した場合にのみ発生します。 else ステートメントを実行します (break によってループを終了しないでください)。ループがbreak文で中断された場合、elseは実行されません。

for/else は、C 言語と同様のフラグを追加できます。

found = False
for i in range(5):
 if i == 1:
  found = True
  print 'in for'
if not found:
 print 'not found'

print 'after for-loop'


# in for
# after for-loop

for ステートメントと同様に、while ステートメント内の else 節の使用法は同じです。 elseブロックがループ内にある場合 正常終了時およびループ条件不成立時に実行されます。

条件文 if-else についてはすでによく知っていますが、Python では、走査の失敗を処理するために for-else が使用されます。

たとえば、(81, 99) の中で最大の完全二乗数を見つけて、それが見つからない場合はプロンプトを出力する、というような関数を実装したいとします。

C++ for ループを使用して実装する場合は、for ループのトラバーサルが失敗するかどうかを手動で判断する必要があります:


#include <iostream> 
#include<math.h> 
using namespace std; 
int main() 
{ 
 int i; 
 float n; 
 for(i=99;i>81;i--) 
 { 
  n=sqrt((float)i); 
  if(n==int(n)) 
  { 
   cout<<i; 
   break; 
  } 
 } 
 if(i==81) //边界判断 
  cout<<"didn&#39;t find it!"<<endl; 
 return 0; 
}

この関数は、Python の for-else を使用して簡単に実装できます:

from math import sqrt 
for n in range(99,81,-1): 
 root = sqrt(n) 
 if root == int(root): 
  print n 
  break 
else: 
 print"Didn&#39;t find it!"

else は、for ループが完全に完了した後にのみ実行してください。途中でブレークから飛び出す場合は、else と一緒に飛び出すことになります。

特に注意が必要なのは、forにif文がある場合、elseのインデントをforに合わせる必要があり、ifに合わせるとif-else文となり、以下のような予期せぬエラーが発生することです。 :

from math import sqrt 
for n in range(99,81,-1): 
 root = sqrt(n) 
 if root == int(root): 
  print n 
  break 
 else: 
  print"Didn&#39;t find it!"

for-else を使用するとコードが 2 行節約され、読みやすくなりますが、if-else と混同されやすくなります。実際にはあまり使用されないようですが、手動で処理される可能性が高くなります。

Python の for および Break ループ構造での else ステートメントの使用に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。