【Python独学】while文による繰り返し処理の基本
while文による繰り返し処理の基本について
今回は「while文」と呼ばれる、for文とはまた違った役割である繰り返し処理を実行するための構文について紹介します。
while文について
while文とは、条件を満たしている間は繰り返し処理を実行する、というものです。while文は、for文と同様に他の多くのプログラミング言語でも用いられており、Pythonでも同様の役割を持っています。
以下が、while文の書き方になります。
while 条件式 : 実行する処理1 #条件式が真(true)なら実行される処理 実行する処理2 ・・・
条件式が満たされている(=真(true))間は、ブロック内の処理が繰り返されます。
繰り返し処理が実行されていき、あるタイミングで条件式が満たされなくなると(=偽(false))、while文の繰り返し処理は終了となります。
なお、for文やif文と同様、ブロック内の処理を記述する際にはインデントを入れていることに注意しましょう。
それでは、while文を使用した処理の例を見ていきましょう。
while文の具体例
次の例では、0を初期値として1ずつ繰り返し加算されていきますが、5より大きくなった場合に偽(false)となって終了となります。
num = 0 #初期値がないと、4行目の部分でエラーが出ます while num <= 5 : #numが5以下の場合は真(true) print(f"num = {num}") #「num = 値」の書式で出力 num += 1 #1ずつ加算
num = 1
num = 2
num = 3
num = 4
num = 5
それでは、もう一つ例を見てみましょう。
所持金が1000円でランダムに商品の購入を続けていき、残り300円未満になったら購入をやめるというイメージのプログラムです。
import random #randomモジュールの読み込み money = 1000 #初期のmoneyは1000 feelist = [100, 200, 300] #金額100、200、300のリスト while money >= 300 : #moneyが300円以上の場合は真(true) fee = random.choice(feelist) #randomモジュールのchoice関数 money -= fee #moneyからfeeをマイナス print(f"料金は{fee}円、残金は{money}")
料金は100円、残金は600円
料金は200円、残金は400円
料金は200円、残金は200円
※出力は毎回ランダムに変わるので、一例となります。
今回はrandomモジュールのchoice関数を用いて、ランダムでfeelistリスト内の金額を取り出しています。
残金が300円未満になったら、while文での繰り返しが終了となります。
無限ループに注意
while文の注意点です。
while文では条件式が真(true)の間はブロック内の処理が繰り返されますが、いつまでも条件式が偽(false)とならない場合、繰り返し処理は無限に実行されてしまいます。
例として、上記のプログラムをnumが1ずつ加算という処理ではなく減算という処理に変えます。
num = 0 while num <= 5 : #numが5以下の場合は真(true) print(f"num = {num}") num -= 1 #1ずつ減算
num = -2
num = -3
num = -4
num = -5
num = -6
・・・以下無限に続く
numは繰り返しのたび-1,-2,-3,-4・・・となっていき、マイナス方向に無限に増えていきます。
これは、常にnumは5以下、つまり、いつまで経っても条件式が真(true)となってしまっているからです。
このように、条件式と処理文の内容によっては無限ループに陥ってしまうので、注意しましょう。
なお、誤って無限ループの出力をしてしまった場合には「ctrl + Z」もしくは「ctrl + C」で出力を中断することが出来ますので、念のため覚えておきましょう。
まとめ
while文では、条件式を満たしている間(=真(true))は繰り返し処理を実行し、条件式が満たされなくなると(=偽(false))繰り返し処理は終了となります。
※条件式がいつまで偽(false)とならない場合には繰り返し処理が無限ループとなるので、注意しましょう。
確認問題
while文の基本的な動作を確認してみましょう。
num = i #iは任意の値 while num <= j : #jは任意の値 print(f"num = {num}") num += k #kは任意の値