【初心者向け】7章 breakとcontinue【Python】

Python

ループを途中で終了させるbreak

繰り返し文の条件式で False になった時に、ループは終了します。break を使用するとループの途中でも、ループを終了させることができます。
breakを使用することでループを終了させる条件を複数にすることができます。


breakのポイントは2つです

・breakの処理が実行されるとループが終了する。
・breakの処理が実行されると、break以降の処理は実行されない


前章の練習問題1で 1 から 10 までを足すプログラムを作成しました。
そのプログラムに一つの条件を加え、breakの例を見ていきます。

・ループの途中の足し算の結果が4の倍数である場合、ループを終了させる。


この条件を加えるとループの終了の条件が

・1 から 10 まで足し切るか
・途中の足し算の合計が4の倍数か


の2つの条件のうちどちらかの条件に合えばループを終了とさせることができます。
これを実現するのが break になります。


プログラムの例を見ていきます。


コード

# 変数宣言
result = 0
count = 1

# 1から10までを足す。
while count <= 10:
    print("開始")
    print("現在のループ数:", count)
    
    # 足し算
    result = result + count
    
    # 足し算の結果が4の場合ならループ終了
    if result % 4 == 0:
        break
    
    count = count + 1
    
    print("終了")

# 結果の出力
print("ループ終了後のcountの値:", count)
print(result)


実行結果

開始
現在のループ数: 1
終了
開始
現在のループ数: 2
終了
開始
現在のループ数: 3
終了
開始
現在のループ数: 4
終了
開始
現在のループ数: 5
終了
開始
現在のループ数: 6
終了
開始
現在のループ数: 7
ループ終了後のcountの値: 7
28


プログラムの流れをわかりやすくするためにフローチャートで表します。


7までしか足していないのにも関わらず、足し算の結果(resultの値) が4の倍数である28になったことにより、breakが実行されてループが終了しています。


またbreak以降の処理は実行されませんので、「 count = count + 1 」「 print(“終了”) 」が実行されずにループが終了しています。

途中でループの最初に戻るcontinue

breakはループの途中で終了させることができたことに対し、ループの途中でループの最初に戻る continue が存在します。


continueのポイントは2つです。

・continueの処理が実行されるとループの最初に戻る
・continueの処理が実行されると、continue以降の処理は実行されない


前章の練習問題2で 1 から 10 のうち奇数の値のみを足すプログラムを作成しました。
このプログラムをcontinueを用いて書くことができます。


練習問題の時は「もし奇数なら足す」という条件分岐を用いました。この条件を以下のように変更します。

・偶数ならループの最初に戻る。


こちらの条件でプログラムの例を見ていきます。


コード

# 変数宣言
result = 0
count = 1

# 1から10までを足す。
while count <= 10:
    print("開始")

    # 偶数ならループの最初に戻る
    if count % 2 == 0:
        count = count + 1        
        continue
    
    print("現在のループ数:", count)

    # 足し算and count更新
    result = result + count
    count = count + 1
     
    print("終了")

# 結果の出力
print(result)


実行結果

開始
現在のループ数: 1
終了
開始
開始
現在のループ数: 3
終了
開始
開始
現在のループ数: 5
終了
開始
開始
現在のループ数: 7
終了
開始
開始
現在のループ数: 9
終了
開始
25


こちらもプログラムの流れをわかりやすくするためにフローチャートで表します。


奇数の場合は足し算等の処理は行われていますが、偶数の場合は continue 以降の処理が実行されずに、ループの最初に戻っています。

練習問題

問題1
0が入力されるまで、好きな数字を入力をして、その合計値を計算し、出力するプログラムを作成せよ。
※ユーザから入力を受け付ける時は input() を使用します。


input() を使用すると、ターミナルで入力待ち状態になります。
ここでユーザが入力した値を変数に格納することができます。


コード

# input("ターミナルで表示する文字列をを入れる")
str = input("好きな文字列を入力してください:")
print(str)


実行結果

好きな文字列を入力してください:test     ←ここで文字列を入力
test


input() はstr型として変数に格納されるため、int型に変更する必要があります。

int(変数)

で変数の型をint型に変えてくれます。


順番にプログラムを作成していきましょう。

①入力された値を永遠に足し続けるプログラムを作成
②もし0が入力されたら、ループを終了させる文を追加。


①足し算を繰り返し行うので、while文を使用します。
 この時whileの条件式は常に True になるようにしておきます。
 
 常に True なので試しにプログラムを実行すると無限ループになります。
 無限ループの止め方は6章で解説しています。


②「もし0が入力されたら」なのでif文を使ってTrueの場合はbreakする文を書きましょう。


コード

# 変数宣言
result = 0

while True:
    # ユーザからの入力待ち
    num = input("好きな数字を入力してください。:")
    num = int(num)

    # 入力された値が0ならループ終了
    if num == 0:
        break
    
    # 合計値を算出
    result = result + num

# 結果出力
print(result)


※ コードは解答例です。正解は一つではありません。


問題2
問題1の答えでは、ユーザからの入力時に何も入力されなかった場合、
num = int(num)
の部分で型の変換がうまくできずにエラーになります。
このエラーを回避するようにプログラムを修正せよ。


エラーを回避するためには、入力値が空だった場合、再度入力をしてもらうようにすれば回避できます。

言い換えると、ループの最初に戻って入力待ちの処理を実行すればいいことになります。


コード

# 変数宣言
result = 0

while True:
    # ユーザからの入力待ち
    num = input("好きな数字を入力してください。:")
    
    # もし入力値が空ならもう一度入力
    if num == "":
        print("入力値が空です。もう一度入力してください。")
        continue
    
    # int型に変換
    num = int(num)

    # 入力された値が0ならループ終了
    if num == 0:
        break
    
    # 合計値を算出
    result = result + num

# 結果出力
print(result)


※ コードは解答例です。正解は一つではありません。


このように予期せぬエラーが起きないように、エラーを回避することは大事です。エラー回避のことを考慮しておかないとバグに繋がります

この回答においても、もし文字列が入力されたらエラーになるため、文字列のことも考慮する必要があります。
ただし文字列の場合を考慮すると他の知識が必要になるため今回は割愛します。