ゼロからのPython入門講座while文による繰り返し

continue文

whileループbreak文による中断代入文と等号continue文

break文による中断 では、ループを途中で中断する break 文を紹介しました。

今度は、ループを中断するのではなく、ループの先頭に戻ってやり直す continue 文を紹介します。

次のプログラムは、変数 i の値が偶数のときだけ、even と出力します。

In [15]:
i = 0
while i < 10:
    i = i + 1

    if (i % 2) == 1: # iを2で割った余りが1のとき
        continue
    print(i, "is even.")
2 is even.
4 is even.
6 is even.
8 is even.
10 is even.

この例では、次のような処理を行っています。

  1. 変数 i に初期値 0 を代入します。
  2. 条件式を i < 10 として、while ループを開始します。i10 よりも小さいあいだ、次の処理を繰り返します。
    1. 変数 i1 を加算します。
    2. 変数 i2 で割った余りを求め、余りが 1 のとき、continue 文を実行して、ループの先頭からやり直します。
    3. 変数 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("終了しました")
1 回目: 100
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-2-3453c2088c18> in <module>
     10         break
     11 
---> 12     number = int(text) # 入力した文字列を数値に変換する
     13     print(counter, "回目:", number * number) # 入力した数値の2乗を表示する
     14     counter = counter + 1  # counter の値に 1 を加算する

ValueError: invalid literal for int() with base 10: ''

なにも文字を入力せずエンターキーを押すと、input() 関数の戻り値は長さゼロの文字列 '' になります。この文字列は数字ではないため、int() による 文字列の数値化 の際にエラーとなってしまいます。

このプログラムを修正し、なにも入力されていなければ何もせず、ループの先頭からやり直すようにしてみましょう。

continue 文を使って、入力された文字列が空('')なら、ループの先頭に戻るようにします。

In [18]:
counter = 1 # 現在、何回目かを記録する変数

while counter <= 10:  # counterの値が10以下なら繰り返す
    text = input("数字を入力してください")
    
    # if 入力された文字が ''なら
    if text == '':
        # ループの先頭に戻る
        continue

    # 入力された文字が '999' なら
    if text == '999':
        # ループを中断する
        print("中断します")
        break

    number = int(text) # 入力した文字列を数値に変換する
    print(counter, "回目:", number * number) # 入力した数値の2乗を表示する
    counter = counter + 1  # counter の値に 1 を加算する

print("終了しました")
中断します
終了しました

修正版では、

# 入力された文字が ''なら
    if text == '':
        # ループの先頭に戻る
        continue

という処理を追加しています。この処理では、入力された文字をチェックし、 text == '' が真なら、 continue 文を実行して、ループの先頭からやり直します。



Python.jp Discordサーバ

Discord によるチャットサービスです。情報交換・質問・雑談などにご利用ください。

【Copyright © 2001-2020 python.jp】 【Privacy Policy】 python_japan