while文のbreakとcontinueの使い方について
今回はwhile文においての
・ある条件下で、繰り返し処理を途中で終了する「break」
・ある条件下で、繰り返し処理の一部をスキップする「continue」
について紹介します。
breakについて
for文でのbreakの使用方法については以前の記事で触れましたが、while文の中での使用方法も同じです。
ある条件になったら繰り返し処理を中断して終了させる、という場合に使われます。
簡単な例を見てみましょう。
次のwhile文は、0を初期値として数値を1ずつ繰り返し加算していき、5より大きくなった場合に繰り返しが終了します。
ただし、数字が4になったときbreakさせます。
1 2 3 4 5 6 7 | num = 0 while num < = 5 : if num = = 4 : #breakの条件文(numが4の時に、break) print ( "4でbreak" ) break print (f "num = {num}" ) num + = 1 |
num = 1
num = 2
num = 3
4でbreak
このように、breakの条件が成立した時に、繰り返し処理が途中であっても終了となります。
それでは、もう一つ例を見てみましょう。
九九の問題がランダムに表示され、正解を入力出来るまで繰り返し入力を続ける、といったイメージのプログラムになります。
途中で「q」と入力することで終了(break)できる形にします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from random import randint #randamモジュールのrandint関数の読み込み while True : i = randint( 1 , 9 ) j = randint( 1 , 9 ) ans = i * j question = f "{i}×{j}の答えを入力してください:" input_value = input (question) if input_value = = str (ans): #input()で入力された値は文字列扱いとなるため、数値ansはstr型にして比較 print ( "正解です" ) break #正解でbreak if input_value = = "q" : print ( "qが入力されました" ) break #qが入力でbreak else : print (f "不正解。正解は{ans}でした" ) print ( "また挑戦してください(終了)" ) |
7×3の答えを入力してください:21 #自分で入力
正解です
また挑戦してください(終了)
8×8の答えを入力してください:q #自分で入力
qが入力されました
また挑戦してください(終了)
なお、while文の条件式にはTrueと記述しています。
この場合、条件式は常に真(true)となり、breakとなるまでwhile文内の処理が繰り返されます。つまり上記プログラムの場合だと、正解を入力する、もしくは「q」を入力するまで、何度でも回答を入力出来る形になります。
continueについて
while文の中でのcontinueの使用方法もfor文と同じです。
ある条件下で繰り返し処理の一部をスキップする、という場合に使われます。
それでは、例を見てみましょう。
『所持金が1000円で、残り300円未満になるまでリスト内の商品をランダムに購入し続ける』といったイメージのwhile文について、リスト内に小数や文字列といった無効な値が含まれている場合にはcontinueでスキップする、という形にします。
1 2 3 4 5 6 7 8 9 10 | import random #randamモジュールの読み込み money = 1000 feelist = [ 0.1 , 100 , 200 , 300 , "apple" ] #小数、文字列も含まれたリスト while money > = 300 : fee = random.choice(feelist) #randamモジュールのchoice関数 if not isinstance (fee, int ) : print (fee, ":無効な値のため除外" ) continue money - = fee print (f "料金は{fee}円、残金は{money}" ) |
apple :無効な値のため除外
料金は200円、残金は600
料金は300円、残金は300
0.1 :無効な値のため除外
料金は200円、残金は100
※出力は毎回ランダムに変わるので、一例となります。
このようにcontinueではwhile文の繰り返し処理を終了せずに、スキップして次の繰り返しへ移行します。
breakとの動作の違いについては区別できるようになりましょう。
まとめ
・while文での繰り返し処理を途中で終了するには「break」を使用します。
・while文での繰り返し処理の一部をスキップするには「continue」を使用します。
また、while文での条件式にはTrueと記述することで意図的にループを生み出すことが可能ですので、併せて覚えておきましょう。
確認問題
11行目のbreakをcontinueに変更して、出力を比較してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from random import randint print ( "問題" ) while True : i = randint( 1 , 9 ) j = randint( 1 , 9 ) ans = i * j question = f "{i}×{j}の答えを入力してください:" input_value = input (question) if input_value = = str (ans): print ( "正解です" ) break #もしくはcontinue if input_value = = "q" : print ( "qが入力されました" ) break else : print (f "不正解。正解は{ans}でした" ) print ( "また挑戦してください(終了)" ) |