for構文では回数の決まった繰り返し&リストの値のあるかぎり繰り返す処理を学びました。
while構文では条件を満たす間繰り返し処理をするプログラムをみていきましょう。
while構文とは?
whileのあとに「True」か「False」を返す式や関数を書き、条件が「True」の間処理を繰り返す。
while構文の基本形
while_条件式:
____条件式が当てはまっている限り繰り返す処理
ポイント①
繰り返したい文の前は1段落インデント(_部分)
ポイント②
条件式のあとに:(_部分)
ポイント③
whileと条件式の間は半角スペース(_部分)
具体例
それでは実際にwhile構文を用いたプログラムを書いていきます。
今回は例として、
「まず所持金を10000円とします。ある施設では、一定時間が経過するごとに1000円費用がかかるとして所持金の減少の経過」を表示するプログラムを作っていきましょう。
①変数「shojikin」を設定し、10000を代入
②while構文 条件式「変数shojikinは0以上」が「True」である限り③以下を繰り返し処理
③変数shojikinを表示
④変数shojikinから1000を引いた結果を変数shojikin代入
※④は累算代入文を使って短く書くことができます
IDELでプログラムを実行すると下図
累算代入文とは
上記具体例④行目では「shojikin =shojikin – 1000」と、shojikinnという変数名を2回書かなければいけません。
省略して「shojikin -= 1000」と短く書くことができます。
繰り返し構文の中では、ある変数の値を増減させる処理がよく出るので、このように省略形で書くことができるようになっています。
頻出の累算代入文の演算子を表にまとめます。(_の部分が演算子)
演算子(_) | 意味 | 同じ意味の式 |
変数 += 10 | 変数の値を10増やす | 変数 = 変数 + 10 |
変数 -= 10 | 変数の値を10減らす | 変数 = 変数 - 10 |
変数 *= 10 | 変数の値に10掛ける | 変数 = 変数*10 |
変数 /= 10 | 変数の値を10で割る | 変数 = 変数/10 |
永久ループ
永久ループを体験してみよう!
while構文を書いていると、間違って永久ループに入ってしまうことが多々あります。1つ例をみてみましょう。
今回は上記具体例を改変したプログラムを例とします。
何が違うかわかりますか?
答えは、4行目のshojikinからのマイナスが「0」になっています。
その結果、永久ループに入り、ずっと「10000」が表示され続けます。
IDLEで実行すると下図。
永久ループ抜け出し方
永久ループを抜け出す方法は2通りあります。
Ⅰ ショートカットキーを使用する場合
IDELのプログラム実行画面で「Ctrl」+「c」を押す
Ⅱ ショートカットキーを使用しない場合
①IDELツールバーの「Shell」をクリック
②「Interrupt Execution」(割り込み例外処理)をクリック
途中で繰り返し処理を抜ける「break文」
break文を使うと、それ以降の繰り返し処理が中断されます。
break文基本形
while_条件式:
____条件が当てはまっている限り繰り返す処理
____ ____break
ポイント
_半角スペース
_コロン忘れずに
_インデント
上記の具体例をbreak文を用いて4000になったら繰り返し処理を抜けるようなプログラムを作成してみます。
①~④上記具体例どおり
⑤もし「shojikin」が3000になったら以下を実行
⑥繰り返し処理を終了する
IDELを用いて実行すると下記
以降の処理をせずに繰り返しの先頭に戻る「continue文」
特定の値をスキップして繰り返し処理を行うcontinue文をみていきましょう。
continue文の基本形
while_条件式:
____条件が当てはまっている限り繰り返す処理
____ ____continue
ポイント
_半角スペース
_コロン忘れずに
_インデント
使用例
変数「a」に1を足していく繰り返し処理(a<10)を書き。
6と9をスキップする。
④、⑥行目
変数「a」が3、6のときcontinue文が実行され繰り返しの先頭に戻り、
以下の処理print(a)がスキップされる
IDELで実行すると下記
while文の終了時に実行される「else文」
while文とelse文を組み合わせることで、繰り返し処理の終了時に特定の処理を行うことができます。
while-else文の基本形
while_条件式:
____条件が当てはまっている限り繰り返す処理
else:
____条件が当てはまらなかった場合に実行される処理
ポイント
_半角スペース
_コロン忘れずに
_インデント
使用例
上記の具体例を用いて、変数「shojikin」が0になったときに「所持金がありません」と表示するようなプログラムに改変します。
⑤⑥行目
条件式 shojikin >=0 が満たされない時、「else」以下の処理が実行される
IDELを用いて実行すると下記
まとめ
条件を満たす限り繰り返し処理を続けるものが「while構文」です。
繰り返す回数を指定したり、リストの値を繰り返すものが「for構文」。
違いを意識して使い分けましょう。
最後まで読んでいただきありがとうございます。
コメント