break文による中断 では、ループを途中で中断する break 文を紹介しました。
今度は、ループを中断するのではなく、ループの先頭に戻ってやり直す continue 文を紹介します。
次のプログラムは、変数 i の値が偶数のときだけ、値を画面に出力します。
In [15]:
i = 0
while i < 10:
i = i + 1
if (i % 2) == 1: # iを2で割った余りが1のとき
continue
print(i, "is even.") # 値を出力
この例では、次のような処理を行っています。
- 変数
iに初期値0を代入します。 - 条件式を
i < 10として、whileループを開始します。iが10よりも小さいあいだ、次の処理を繰り返します。- 変数
iに1を加算します。 - 変数
iを2で割った余りを求め、余りが1のとき、continue文を実行して、ループの先頭からやり直します。 - 変数
iの値を、"値 is even"と出力します。
- 変数
変数 i が奇数の場合は、continue 文が実行され、次の行の print() 関数が実行されずに、ループの先頭に戻っているのがわかると思います。
continueの例¶
break文による中断 では、999 という入力があったら break 文でループを中断する、というプログラムを書きました。もう一つの例として、continue 文を使って、このプログラムを改善してみましょう。
現在、このプログラムを実行して、文字を何も入力せずにエンターキーだけを入力するとこんなエラーが発生してしまいます。
In [2]:
counter = 1 # 現在、何回目かを記録する変数
while counter <= 10: # counterの値が10以下なら繰り返す
text = input("数字を入力してください")
# 入力された文字が '999' なら
if text == '999':
# ループを中断する
print("中断します")
break
number = int(text) # 入力した文字列を数値に変換する
print(counter, "回目:", number * number) # 入力した数値の2乗を表示する
counter = counter + 1 # counter の値に 1 を加算する
print("終了しました")
なにも文字を入力せずエンターキーを押すと、input() 関数の戻り値は長さゼロの文字列 '' になります。この文字列は数字ではないため、int() による 文字列の数値化 の際にエラーとなってしまいます。
このプログラムを修正し、なにも入力されていなければ「入力が無効です」と出力して、ループの先頭からやり直すようにしてみましょう。
continue 文を使って、入力された文字列が空('')なら、
ループの先頭に戻るようにします。
In [3]:
counter = 1 # 現在、何回目かを記録する変数
while counter <= 10: # counterの値が10以下なら繰り返す
text = input("数字を入力してください")
# if 入力された文字が ''なら
if text == '':
print("入力が無効です")
# ループの先頭に戻る
continue
# 入力された文字が '999' なら
if text == '999':
# ループを中断する
print("中断します")
break
number = int(text) # 入力した文字列を数値に変換する
print(counter, "回目:", number * number) # 入力した数値の2乗を表示する
counter = counter + 1 # counter の値に 1 を加算する
print("終了しました")
修正版では、
# 入力された文字が ''なら
if text == '':
print("入力が無効です")
# ループの先頭に戻る
continue
という処理を追加しています。この処理では、入力された文字をチェックし、 text == '' が真なら、 continue 文を実行して、ループの先頭からやり直します。