while文とは
while文とはpythonの繰り返し処理の構文で、for文より複雑な条件を加えることができます。
for文では、指定された範囲内で繰り返し実行を行いましたが、while文では条件を満たしている時にブロック内のコードを繰り返し実行するので、「if文」と「for文」を合体させたイメージで書いていくことができます。
while文の基本的な書き方
while文の基本的な書き方は、
実行する処理
となります、while文はループ処理を行うための構文なのですが、書き方はif文と似ています。
でわ、簡単なコードを書いてみます。
i = 0 while i <= 5: print(i) i = i + 1
1
2
3
4
5
while文ではまず、変数の初期値を設定する必要があります。
その後whileの後に「i <= 5」とiが5以下の時を条件とし、条件が満たされたときに実行する処理を「i」を出力して、その後に変数「i」に1をプラスする。以後5以下の時これをループするという内容になっています。
因みに、「i = i + 1」このように、変数に数字を加算したり、減算する事がプログラムではよくあるのですが、同様の処理をpythonでは「i += 1」とする事もできます。
減算は「i -= 1」乗算は「i *= 2」と記載することができます。
今後別記事にて詳しくまとめたいと思いますが、今後コードを書いていく上で「In-Output」内でもこの書き方は出てきますので、今の内に覚えておきましょう。
while文の無限ループに注意
while文を書く上で一番注意しないといけない事は、コードを書き間違えると無限ループが発生する可能性があるという事です。
無限ループが発生すると、「Ctrl + c」や強制終了を使ってコマンドプロンプト等を落とす事になりますが、高負荷がかかっている処理がループすると最悪PCを強制終了させる事になります。
無限ループはPCにも負荷が発生しますので、while文を書く上で無限ループを発生させないように、気を付けましょう。でわ、無限ループが発生する場合のコードを書いてみます。
因みにこのコードは実行しないでください。
i = 0 while i <= 5: print(i)
このコードは無限ループが発生します。先ほどのコードの最後の行「i = i + 1」が抜けているためですね。このままだと変数「i」が0のままなので、条件の「i <= 5」が永遠に満たされていて、「print(i)」が無限に繰り返されます。
i = 0 while i >= 0: print(i) i += 1
このコードだと、変数「i」はブロップ内の処理により変動しますが、条件である「0以上」を永遠に満たしてしまいますので、これも無限ループになります。
コードの中で無限ループを抜け出すためにはbreak文を使用します。
もし、実行したコードが無限ループとなってしまった場合は、windowsの場合はCtrl を押しながら C Macの場合はcontrol を押しながら C を実行しましょう。
while文でのelse
while文でもelseを使えます。使い方はfor文と同じで、ループ処理の後に実行するコードを記述できます。breakでループを抜けている時はコードは実行されません。
while文を使うと変数はどのように変化するのか
while文を使うと変数は動いていきますが、ループが終了した後、変数はどうなっているのでしょうか。実際にコードを用いて見てみましょう。
i = 0 while i < 3: print(str(i) + ":ループ時のiの値") i += 1 else: print(str(i) + ":else時のiの値") print(str(i) + ":while終了後のiの値") i += 10 print(str(i) + ":最後に10を足した後のiの値")
でわ、このコードの変数「i」は最終的にいくつになるでしょうか?
- 答えを見る
-
0:ループ時のiの値 1:ループ時のiの値 2:ループ時のiの値 3:else時のiの値 3:while終了後のiの値 13:最後に10を足した後のiの値
以上でwhile文の基礎は終わりです。
for文のようにループし、if文のように条件を付けると覚えると感覚がつかみやすいといもいます。
後は、この後でてくるリストや辞書等をつかったwhile文の書き方等ですが、応用編で解説いたします。最後に問題を解いてみましょう。
while文 基礎問題
while文の基礎問題です。エラーが出る場合はエラーを予測してください。また、無限ループが発生する場合は無限ループを予測してください。
問1:出力結果は?
i = 5 while i < 15: i += 2 print(i) i += 1
- 答えを見る
-
7 10 13 16
最初に出力される数値は「5」に「2」を足した「7」となります
「7」に「1」を足した数値はwhileの条件を満たしてますので、更に「2」を足して「10」が出力されます。同様に「13」が出力された後「1」を足した「14」は条件を満たしてますので、「2」を足した「16」が出力されます。
問2:出力結果は?
i = 8
while i < 15: if i >= 10: i += 3 print(i) else: i += 1 print(i)
- 答えを見る
-
9 10 13 16
whileとifの組み合わせです。
「i」が「15」を超えるまでif文は繰り返されます。
最初は「8」なので、elseが実行され「9」が出力されます、
「i」が「9」の時はまだif文の条件を満たしてないで、elseが実行され+1されて「10」が出力されます。「i」が「10」を超えましたのでifが実行され、+3され「13」が出力されます。
whileの条件はまだ満たしておりますので、最後のif文が処理されて+3の「16」が出力されて終了です。
問3:出力結果は?
i = 10 if i > 5: while i > 2: i -= 2 print(i) else: i -= 1 print(i)
- 答えを見る
-
8 6 4 2
if文とwhile文の組み合わせです。この場合、ifの条件が満たされてますので、if文の中のwhile文のループ処理は行われますが、if文は繰り返さないので、elseの処理は行われません。
問4:出力結果は?
i = 5 while i == 5 or 6: print(i) i += 1
- 答えを見る
- 無限ループ!!(一見「5」「6」と出力されて終わりそうですが、これは「7」「8」「9」と無限に繰り返されてしまいます。まだ「In-Output」では取り扱っておりませんが、「or」の書き方が間違っています。※この問題の詳しい解説は最後に書いておきます。)
問5:出力結果は?
i = 3 while i > 0: print(i) i += 1 if i == 5: break
- 答えを見る
-
3 4
まだ、In-Outputでは深く扱っていないbreakの使い方の例です。
見たままのイメージ通り、変数「i」は「3」が出力され「4」出力されます。
その後に、変数「i」は「5」になり、出力されることがないまま、if文を満たし、breakにより終了します。
問4の補足解説
問4が何故無限ループになるのか解説します。
i = 5 while i == 5 or 6: print(i) i += 1
先に結論を言うとこのコードを「5」「6」のみを条件としたい場合は
i = 5 while i == 5 or i == 6: print(i) i += 1
このように記載する必要があったのです。
「i == 5 or 6」だとwhileの条件が、「iが5の時」か「6(iは関係なく)」になります。
while文は条件が「True」の時に、ループが行われます。
応用編で詳しく解説しますが、条件式が0以外の整数の時、条件は「True」になります。
整数以外にもTrueになる事もありますので、while文を使うときは注意しましょう。