Python学習 カテゴリ | |
前回 | 次回 |
長かった基本編もそろそろ終わりに近づいています。今回はもうひとつの繰り返し処理であるwhile文についての勉強をしていこうと思います。
for文とwhile文の違いは何?という疑問から、whileの使い方までじっくりと学習していきたいと思います。有料のプログラミングスクールだと大体while文が終わったあたりから有料になることが多いでしょうか。有名サイトだとfor・whileも有料という場合は多いですが。
当サイトでは後々に有料化する考えもあるのですが、とりあえず現在は無料でもう少し深いところまでいってみようと思います。
今回はVSCodeのPython_practiceフォルダに「while.py」というファイルを作成して進行していきます。
前回のおさらい
前回の内容は繰り返し処理とは?という初歩の内容から、for文の基本的な使い方、更にfor文の汎用性の高いbreak・continue・range・zip文との組み合わせを学びました。
一気に紹介したので、プログラミング言語の初学者の方は大変だったと思います。break・continue・range・zipはとにかく覚えておかなければならないので、使い方を覚えられてない方はしっかり復習をしておきましょう。
break文は、目的としていた処理が済み、その後の処理をしなくても良い場合、breakを使うことで無駄な処理の実行をしないように指示し、それ以降の処理を中断するという役割を持っているんでしたね。
continue文は、ループ中に処理をスキップするという目的で使用します。continueを使用することで、それ以降の処理をスキップするんでした。さらに、breakとの違いは対象の要素に当たっても、コード読み込みの中断はされないという特徴がありましたね。
ループを途中で中断したいときはbreakを使用し、ループを継続したいときはcontinueを使おうということを述べました。
また、繰り返し処理の回数を決めたい場合はrange関数を使用し、複数のリストなどの要素をまとめたい場合はzip関数を使用するのでした。
このように、紹介した4つの文の使い方を覚え、まだ覚えられていない方は前回記事に戻り復習をしましょう。
forとwhile文の違い
繰り返し処理を使用する上で、forとwhile文の使い分けができるかどうかが、すっきりした美しいコードを書けるかどうかという点で重要になります。
for文は繰り返し処理の回数を指定し、指定した繰り返し処理が終われば、ループを終了します。主に、繰り返す回数があらかじめ決まっているという場合・リスト全体に処理をかけて何らかの情報を得たいという場合に使用します。
一方、while文は最初に条件を指定し、その条件がFalseになったときにループを終了します。言い換えれば条件がTrueの間はずっと繰り返し処理を続けるということですが、Falseになる条件が存在しなければ無限ループしてしまうので注意。主に、繰り返したい回数が決まっていないという場合に使用します。
使い分け方は、繰り返しの回数があらかじめ決まっている場合にfor文を使い、繰り返す回数は決まっていないが、条件を満たす場合に処理を終えたい場合にwhile文を使うというように使い分けをします。
while文について
while文の基本形
先程も述べたとおり、while文は「Falseが現れるまで繰り返し処理を続ける」ためのものです。for文で紹介したコードも、while文で処理を行ったほうが簡単に済んだ場合もありました。
このように、一応、while文でやりたいことはfor文でも再現可能ですし、その逆も可能ですが、そこに至るまでの文量的なコストを犠牲にする場合が多いです。文量が多くなるということは、それだけメンテナンス性が落ちるということなので、後から改善をしようとした時に何がおかしいのかの判別が困難になります。
よって、繰り返し処理はforもwhileも使用できることが大事になりますのでここで「まあいいや」となって脱落しないように頑張っていきましょう。
さて、通常、while文は以下のように書きます。
while (条件式):
処理内容
それでは例です。1000以下の自乗の数を確かめる場合、以下のようなコードになります。最初に入力する数値は自分で入力できるようにしていますので、1から1000までの間で好きな数字から始めることができます。
今回は入力数値を1として出力してみました。出力が少々長くなってしまいましたが、指定した1000を超えない数字の間で各数字の自乗を繰り返し計算し、出力していることがわかります。
このようにかなり簡単・短いコードのみで31回の繰り返し処理をしてくれました。もちろん、「while num**2 < 1000:」の1000の部分をいじることで更に大きな回数の繰り返し処理をさせることも可能です。
if文との組み合わせ
while文ももちろん、for文と同様にif文との組み合わせで更に細かい条件を付けて複雑な処理をさせることも可能です。
ifの内容は複雑でもなんでもないですが、whileとの組み合わせ方という意味で参考にしてください。ここでは例として、先程作った自乗のコードの出力が偶数のときに偶数とし、奇数のときに奇数だと教えてくれるコードにしてみました。
このように、while文の中でもif文はもちろん、else ifやelseの設定が可能です。みなさんもここまで勉強していれば、基本的なコードは書けると思うのでアレンジしてみてください。
break文と一緒に使う
breakやcontinueについての基本的な利用方法と意味ついてはforの回で述べた通りです。ここではwhile文と組み合わせた際の使い方を紹介していきたいと思います。
breakは必要としていた処理を終えた時にそこで切り上げる場合に使う文でした。breakをwhileで使う際、そのような使用方法に加えて、無限ループを防ぐというような使用方法が増えます。while文はその性質から無限ループが起こりやすいので、breakを使って条件を満たした時にループから外れ、処理を終了するというような使い方をします。
また、少しコードを変更してみました。今回は10000以下の数を対象に、77で割った余りが0のとき、つまり77で割り切れる数字の時に処理を終えるという文です。
開始の数値はinputで自由入力になっているので、50を初期数値としました。
77で割り切れる時に繰り返し処理が終わっているのがわかりますね。
continue文と一緒に使う
continueはTrueのとき、処理をスキップする場合に使う文でしたね。while文のcontinue文は条件が成立した際に以降の処理をスキップし次のループに移るというような使用方法が主になります。
上のコードはnumを2で割った余りが1のとき、continueでスキップして処理を指定の数(10000)まで続けるというものです。
全てをスクショしたら長くなってしまうので、こちらも開始値を50としました。
2で割った余りが1なので、奇数値はスキップされ、偶数値が出力されました。このように、whileでもbreakとcontinueの使い分けは大切になりますので、forで使ったbreakとcontinueの使用方法も含めてしっかりと復習をしておきましょう。
次回
今回は繰り返し処理のふたつめ、while文について学んでいきました。今回で基礎中の基礎を終えるというような認識で良いでしょう。次回からはもう少し複雑な内容を学習していこうと思います。
次回の内容はまだ決まっていませんが、基礎の内容を忘れてしまわないようにしっかりと復習を済ませておきましょう。最初の方の内容を忘れてしまったという方ももしかしたらいるのではないでしょうか?
次回の内容については決まり次第こちらでアナウンスします。それではまた。