プログラミング初心者のPython入門#13|条件分岐<while文>

スポンサーリンク
タイトル「Python入門#13条件分岐<while文>」
この記事でわかること

・Pythonにおけるwhile文の処理構造

・Pythonにおける「while ~ break」「while ~ continue」「while ~ else」の書き方

Pythonでwhile文を書く

while文とは?

while文は条件が満たされている間は繰り返し処理を実行するコードです。実行中に処理をスキップしたり、中断することも可能です。

while文の処理構造

条件は理論式で記述し、結果がTrueならwhile文内の処理を実行します。この処理は条件の結果がFalseまたはbreakになるまで実行を繰り返します。

Pythonにおけるwhile文の処理構造

while文の書き方

コードの書き方は前回の記事で紹介したif文と似ており、「while 条件式 :」と記述し、改行して先頭に半角スペース4つのインデントを入れ、ステートメントを書きます。

while 条件式1:
    条件を満たすときの処理A #先頭に半角スペース4つ
インデント入れずにステートメント#while文が終了

while文の記述例

実際にwhile文を使ってコードを書いてみます。

randomモジュールのrandint関数を読み込み、変数aが50以上になるまで、変数bで取得した乱数を足し続けるコードを作ってみましょう。

randomモジュールの関数を読み込む方法はこちらの記事、複合代入演算子(+=の部分)についてはこちらの記事を参考にしてください。

#while文を使った記述例
from random import randint
a = 0
while a <= 50 :
    b = randint(1, 10)
    print(b)
    a += b
print("合計" + str(a))

コードが書けたので実行してみます。

#コードの実行結果
4
9
10
4
10
5
1
4
5
合計52

このように変数aの値が合計50以上になるまで足し算が繰り返された処理結果が表示されます(乱数を生成しているので、まったく同じ数値になっていなくて大丈夫です)。

続いて、もう少し複雑なコードを書いてみます。

randomモジュールのrandint関数を読み込み、変数usdjpyに80~120間の乱数を生成し、変数positionに加算します。変数pyramidingが0になるまで(5回)ループ処理し、最後に変数positionの平均値を表示させます。

#while文を使った記述例
from random import randint
position = 0
pyramiding = 5 #ループする回数
tradecout = pyramiding #平均値計算用
#pyramidingが0になるまで繰り返す
while pyramiding>0 :
    usdjpy = randint(80,120)
    print(usdjpy)
    position += usdjpy
    pyramiding -= 1 #pyramidingを1減らす
#出力
print("-"*5) #見やすいように区切りを入れる
print("ポジション平均価格"+str(position/tradecout)+"円")

上記コードを実行してみましょう。

#コードの実行結果
112
107
101
105
115
-----
ポジション平均価格108.0円

乱数で5回取得した平均値が表示されました。

Pythonでwhile文を中断する:break

while文では終了ではなく、ループ処理を中断することもできます。終了と中断の違いは、終了は条件1を満たした場合にループ処理を抜けるのに対して、中断は条件1とは別に設定した中断条件に合致したとき、割り込み的に処理を終了させます。下の処理構造を見るとbreakは条件1の理論式で判定を経由せず、処理Aからループ処理を抜けていることがわかります。

Pythonにおけるwhile文のbreak処理構造

値が一致したときにループ処理を抜ける

breakを使ったコードを作成してみます。次のコードは変数a,b,cに0~20の乱数を生成し、3つの合計値が30になる組み合わせになるまで処理を繰り返します。合計値が30になったらループ処理を抜けてそれぞれの変数の値を表示させます。

#breakコードの記述例
from random import randint
while True :
    a = randint(0, 20)
    b = randint(0, 20)
    c = randint(0, 20)
    if(a + b + c) == 30 :
        break
print(a, b, c)
print(a + b + c)

コードを実行してみます。

13 12 5
30

このように変数a,b,cの合計値が30になる値が表示されました。

Pythonでwhile文の処理をスキップする:continue

先ほどのbreakはループ処理を終了するのに対して、continue実行中の処理をスキップしてループ処理を継続します。

Pythonにおけるwhile文のcontinue処理構造

値が重複している場合はスキップする

continueを使って「重複しない整数が5つ入ったリストを作成する」コードを作ってみます。変数numrandint関数を使って0~10の乱数を生成し、リストboxに重複した値がなければリストに数値を加えます。重複している場合はリストに加えず(スキップ)、変数numに乱数を生成する処理に戻り、リストに5つの整数が加わればループ処理を終了します。

リストについては他の記事で詳しく解説します。

#continueコードの記述例
from random import randint
box = []
while len(box) < 5 :
    num = randint(0, 10)
    if num in box :
        continue
    box.append(num)
print(box)

コードを実行してみます。

[9, 6, 4, 3, 8]

このように1~10の整数から重複しない値のリストを作成することができました(乱数を生成しているので、まったく同じ数値になっていなくて大丈夫です)。

Pythonでループ処理後に処理を加える:while ~ else

while文では結果がTrueならwhile文内の処理をループして、結果がFalseならwhile文を終了します。if文で解説したif ~ elseのようにwhile文でもelseを使って、結果がFalseの時に処理を加えることが可能です。また、下の図の様にbreakした場合はelseの処理は実行されません。

Pythonにおけるwhile文のelse処理構造

特定の値が出たら処理を中断する

先ほどのコードにbreakと組み合わせてelseを追加してみます。変数numが0となった場合、処理を中断し「中断」と表示させます。処理が中断せずに終了した場合、リストboxを表示させます。

#while ~ elseコードの記述例
from random import randint
box = []
while len(box) < 5 :
    num = randint(0, 10)
    if num == 0 :
        print("中断")
        break
    if num in box :
        continue
    box.append(num)
else :
    print(box)

コードを実行してみます。

[1, 9, 4, 10, 5]

中断せずに処理が終了した場合、1~10の整数が5つ入ったリストが表示されます。

中断

処理が中断した場合、リストが表示さず「中断」と表示されます。

今回のまとめ

・while文は結果がTrue:処理を継続、結果がFalse:処理を終了

・ループ処理を中断させるにはbreak

・ループ処理の結果をスキップし、処理を継続するにはcontinue

・while文の結果がFalseの場合に実行する処理を追加するにはelse

コメント

タイトルとURLをコピーしました