Python学習 カテゴリ | |
前回 | 次回 |
ここが終われば基礎も終盤という感じです、今回はfor文とwhile文について学習していきます。他言語を勉強している方はご存知の方が多いと思いますが、for文とwhile文は繰り返し処理という処理を担当するものです。
繰り返しって英語の意味とは全然関係ないじゃん!!って思っている方、私も思っています。なぜ繰り返し処理なんでしょうか、知っていたら教えて下さい。
しかしながら、forもwhileも英語では「〜の間」や「〜する間」という意味があります、その意味の通り、指定された条件が真のとき、forやwhile文の中でのみ繰り返し処理が実行されます。
今回はVSCode上で「for.py」というファイルを作成して進めていきますので、進行を合わせたい方はファイルを作成してお進み下さい。
繰り返し処理とは
じゃあ繰り返し処理ってどんな処理?と言われれば、そのままの意味で「繰り返しの処理を行ってくれる」ということになりますが、なぜそんな処理が必要なのかと言われれば、人力だと大変だよねという話です。
もし、連続で出力をしたい文がある時、いちいちprint関数で出力を指定するのは根気のいる作業になります。以下のコードを見てみましょう。
実際、これくらいの処理ならば手打ちでもどうにでもなりますが、2,30個になってくると流石にキツくなってきますよね、更にコードの見た目も汚くなるので綺麗なコードを書きたい場合、print関数がズラッと並んでいるコードなんて最悪の印象です。
しかし、これがfor文やwhile文を使うことで3行という、簡潔な文で済ませることが可能です。
この差は大きいですね、ごちゃごちゃしない、文字数が少ない、つまりメンテナンス性が高いということにも繋がりますので積極的に活用していきましょう。
for文について
for文の基本形
for文は「配列として記述したデータに対して、毎回同様の処理を実行する」ためのものです。配列に文字列や数値のデータをまとめ、配列を変数に代入し、その要素を繰り返し1つずつ取り出して処理します。配列に対応した変数データを 反復可能オブジェクト と呼びます。
通常、for文は以下のように書きます。
for (変数) in (反復可能オブジェクト):
処理内容
以下の文を見て下さい、(変数)はitem2、(反復可能オブジェクト)はdata2に当たり、この形がよく使われる形となります。
なお、通常inはin演算子と呼ばれるものに該当しますが、このinはin演算子と呼ばれるものではありません。
そしてここから関数やif,break,continue文と組み合わせて、更にスマートで便利なコードを作り上げていきます。
if 文との組み合わせ
if文と組み合わせることで、条件付けを行い、データのまとまりから特定のデータを探すということも可能です。
例えばリアル鬼ごっこ風に「佐藤」を探すというプログラムを作ってみました。
for文でリストの名字を繰り返し処理して、if文でもし、佐藤を見つけた時は「: ミツケタ」と表示し、「佐藤」以外を見つけたときは「: オマエ ニ ヨウ ハ ナイ」と出力をします。
このようにif文との組み合わせで特定のデータを見つけたり、特定のデータを見つけた時に、別に用意した処理を実行するということも可能です。
また、if文のとき同様に、elseで条件外のときの処理を記述してあげることもできます。
break 文との組み合わせ
break文を使う目的は、目的としていた処理が済み、その後の処理が必要のない時、コードを実行するだけで処理時間が余計にかかってしまいます。そんな時、breakを使うと無駄な処理の実行を止めるように指示します。
以下のコードを実行してみましょう。先程は「佐藤」を発見した後も処理が繰り返されていました。
今回のコードでは「佐藤」を見つけた時点で処理が終了されるようになっています。
これは、もしtargetを発見した時「: ミツケタ」を出力し、そこでbreakするというような指示をすることで「佐藤」を発見した時点で処理を終了するようにしています。
continue 文との組み合わせ
continue文を使う目的は、処理をスキップするためにあります、continueの対象となる要素はcontinue以後の処理をスキップします。breakとの違いは対象の要素に当たっても中断はされないという点です。
ループを途中で中断したいときはbreakを使用し、ループを継続したいときはcontinueを使いましょう。
上のコードでは、dataをリストとし、処理を行う数値をtargetとして受け取り、繰り返し処理で3の5乗の値よりも小さい数値のときにはcontinue文を実行し、3の5乗よりも大きい数値のときにはprint(target)として処理を行うというコードです。
range 関数との組み合わせ
繰り返し処理の回数を決めたい場合はrange関数を使用します。
皆さんとほぼ同じ速度でpythonの勉強をしてる私ですが、今回は少し頑張って勉強してコードを書いてみました。普段、当連載記事は調べて・コードを書いて検証して・用語を調べてと、かなりの工程を踏んで作ってるんです。丸一日かかっている場合もあります。記事を書いた後はテキトーなことを言っていないか共同運営者に検査してもらってます。
さて、少々脱線しましたが、一行目の from time import sleep については後日別パートで学習していくので今回はスルーして下さい。
range関数はカウントをするための関数です。
range(10)と書けば0から9までの数字10個分のカウントをしてくれます。
sleep(1)は処理を1秒待つという指示をしています。そのため、このコードでは1から10までの数字を1秒間隔でカウントしてくれます。
そのため、1から数字10個分を数えたい時は、range(1,11)というように()の中にカンマを挟んで書くことで解決します。
range(開始の数字,終わりにしたい数字の次の数字)
というような書き方をしてあげればいいわけです、結構使えるのでぜひカンマを使った書き方を覚えて下さいね。
余談ですが、コード内の記述を「range(1,181)」としてあげて、「if == 180:」と変更することで、カップラーメンのタイマーになるので、カップラーメンを食べようと思っている方はぜひ使ってみて下さい。
音は鳴りませんがね()
zip 関数との組み合わせ
zip関数は複数のリストなどの要素をまとめたい場合に使用する関数です。これにより情報をまとめて表示することができます。
私の作ったコードは、questionという一般化された質問をリストにし、個人からの回答をanswerというリストに入れ、zipでリストを統合し、print関数で質問と回答を確認しやすくする、というコードです。
要素は2つでなければならないという制約もないので3つ以上の要素をまとめたいときにも使用することが可能です。
次回
今回は繰り返し処理のひとつであるfor文について学んでいきました。段々難易度が上がってるなーという実感が私の中ではあるのですが、皆さんの中ではどうでしょうか。
最近はif+forのように、組み合わせて使うという事例が増えてきたので、復習を怠っていたり、何回か前の回を忘れてしまった…という方がいれば、取り返しのつかなくなってしまう前に復習を済ませておきましょう。
さて、次回はもう一つの繰り返し処理を担うwhile文についての学習を進めていきたいと思います。重複する部分は多いですが、for文とwhile文を使い分けられることが大事なので一緒に学習を頑張っていきましょう。
それではまた。