Lesson 6
whileループ
1. whileループ
while
ループは、ある条件がFalse
評価されるまで何度も一連のアクションを繰り返します。条件はループ本体の前に与えられ、ループ本体が実行される前にチェックされます。通常、 while
ループは、ループ反復の正確な数を事前に決定することが不可能な場合に使用されます。
最も単純な場合のwhile
ループの構文は次のようになります。
while some condition: a block of statements
Pythonは最初に条件をチェックします。 Falseの場合、ループは終了し、 while
ループ本体の次の文に制御が渡されます。条件がTrueの場合、ループ本体が実行され、条件が再度チェックされます。条件がTrueの間、これが続きます。条件がFalseになると、ループは終了し、ループの後の次のステートメントに制御が渡されます。
たとえば、次のプログラムフラグメントは、1から10までのすべての整数の2乗を出力します。ここでは、whileループをfor ... in range(...)
ループに置き換えることができます。
i = 1 while i <= 10: print(i ** 2) i += 1
この例では、ループ内の変数i
が1から10まで繰り返されます。新しいループ反復ごとに値が変化するそのような変数をカウンタといいます。このフラグメントを実行した後、変数i
値は定義され、 11
に等しい。なぜなら、 i == 11
のとき、 i <= 10
条件は最初はFalseであるからである。
整数n
桁数を決定するwhile
ループの別の使用例を次に示します。
n = int(input()) length = 0 while n > 0: n //= 10 # これはn = n // 10と等価です length += 1 print(length) # 4
各繰り返しで、整数の除算を10( n //= 10
)で使用して数値の最後の桁を切り捨てます。変数にはlength
我々はそれをした回数をカウントします。
Pythonでは、この問題を解決する別の簡単な方法があります:
。
2. ループ制御フロー:else
ループの終了後に一度実行されるループ本体の後にelse:
文を書くことができます:
i = 1 while i <= 10: print(i) i += 1 else: print('Loop ended, i =', i)
一見すると、このステートメントは意味を持たないようですelse:
ステートメント本体はループの終わりの後に置くことができるからです。ループの後の "else"ステートメントは、命令break
と組み合わせて使用された場合にのみ意味があります。ループの実行中にPythonインタプリタがbreak
に遭遇すると、ループ実行を直ちに停止して終了します。この場合、 else:
ブランチは実行されません。したがって、 break
は、反復の途中でループの実行を中止するために使用されます。
ここでは、ブラックジャックのような例があります。数値を読み込んで合計が21になるまで合計するプログラムです。入力シーケンスは、すべての数値の合計が21未満です。
さまざまな入力でどのように動作するか見てみましょう。
バージョン1.条件をチェックした後にループが正常に終了するので、 "else"ブランチが実行されます。
total_sum = 0 a = int(input()) while a != 0: total_sum += a if total_sum >= 21: print('Total sum is', total_sum) break a = int(input()) else: print('Total sum is less than 21 and is equal to', total_sum, '.')
バージョン2ループがによって中断されたbreak
ので、「それ以外」の分岐はスキップされます。
total_sum = 0 a = int(input()) while a != 0: total_sum += a if total_sum >= 21: print('Total sum is', total_sum) break a = int(input()) else: print('Total sum is less than 21 and is equal to', total_sum, '.')
"Else"ブランチは、 "for"ループとともに使用することもできます。プログラムが5つの整数を読み込むが、最初の負の整数が満たされたときに停止する例を見てみましょう。
バージョン1.ループは正常に終了し、 "else"ブランチが実行されます。
for i in range(5): a = int(input()) if a < 0: print('Met a negative number', a) break else: print('No negative numbers met')
バージョン2。ループは中断され、 "else"ブランチは実行されません。
for i in range(5): a = int(input()) if a < 0: print('Met a negative number', a) break else: print('No negative numbers met')
3. ループ制御フロー:続行
ループの実行を制御するために使用される別の命令がcontinue
ます。 Pythonインタープリタがループループの途中で何かをcontinue
と、残りの命令はすべてスキップされ、次の反復に進みます。
for num in range(2, 10): if num % 2 == 0: print("Found an even number", num) continue print("Found a number", num)
break
とcontinue
が複数のネストされたループの内部に置かれている場合、最も内側のループの実行にのみ影響します。それを実証するためにかなりばかげた例を見てみましょう:
for i in range(3): for j in range(5): if j > i: # 2行目のforだけを壊します break print(i, j)
あなたがそれらを使用せずにあなたのアイデアを実装することができれば、命令はbreak
しcontinue
ます。 break
悪い使い方の典型的な例を次に示します。このコードは、整数の桁数を数えます。
n = int(input()) length = 0 while True: length += 1 n //= 10 if n == 0: break print('Length is', length)
意味のあるループ条件でこのループを書き直すと、よりクリーンで読みやすくなります。
n = int(input()) length = 0 while n != 0: length += 1 n //= 10 print('Length is', length)
4. 複数の割り当て
Pythonでは、1つの代入文で複数の変数の値を変更することができます。どれどれ:
a, b = 0, 1
上記のコードで示されている効果は次のように書くことができます:
a = 0 b = 1
2つのバージョンの違いは、複数の割り当てが2つの変数の値を同時に変更することです。
複数の割り当ては、2つの変数の値を交換する必要がある場合に便利です。複数の代入をサポートしない古いプログラミング言語では、これは補助変数を使用して行うことができます:
a = 1 b = 2 tmp = a a = b b = tmp print(a, b) # 2 1
Pythonでは、同じスワップを1行に書くことができます:
a = 1 b = 2 a, b = b, a print(a, b) # 2 1
"="の左側には、コンマで区切られた変数名のリストが必要です。右辺には任意の式をカンマで区切って指定できます。左側のリストと右側のリストは同じ長さでなければなりません。