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
文を実行して、ループの先頭からやり直します。