はい、どーも!まっちゃんです!
・while文って一体何?何に使うの??
・学ぶと何が嬉しいの?
・実際はどーやって使うんだろう?
今回はこういった疑問に答えていこうと思います!
もくじ
✓著者の経験
・現在も大学でプログラミングを使ってロボット制御を勉強中
・はじめは入門書を見ても分からなかった経験があり、様々な入門書を読み漁ってようやく理解
こういったボクが解説していきます
ボク自身、はじめはPythonの入門書を読んで勉強してみましたが、その内容すら理解できず、様々な入門書を読み漁った経験があります。
そんな体験の中で「この入門書のここは分かりやすかった」という部分を抽出して解説していこうと思います
while文とは何か?どんな事ができるようになるのか?
while文はPythonの醍醐味の1つである「自動化」に大きく関わるものです。
自動化って何だろう?何が嬉しいんだろう?と思うかもしれないので、ここではその話を深堀していこうと思います
while文って一体なに??
繰り返し構文の1つと呼ばれています。
繰り返し行う作業をこのwhile文はボクらの代わりにやってくれます
同じような作業を何回もやるのはめんどーですよね?
例えばこんなプログラムを考えてみましょう!
1 2 3 4 5 6 7 8 9 10 11 |
print(0) print(1) print(2) print(3) print(4) print(5) print(6) print(7) print(8) print(9) print(10) |
1 2 3 4 5 6 7 8 9 10 11 12 |
(実行結果) 0 1 2 3 4 5 6 7 8 9 10 |
もちろんこれでも正解ですが、今回ご紹介するwhile文を使うとこんな風に書くことができます
1 2 3 4 |
i = 0 while i<=10: print(i) i+=1 |
どうでしょうか?
めちゃめちゃスッキリした感じがありますね!
while文をマスターすると、超ラクに高度な動作を実現することができます
while文が使えるとできるようになる3つのメリット
while文はあなたの代わりにこんなことをやってくれます
・プログラム書く量が圧倒的に減るから、見た目も作業もスッキリ
・無限に作業をやってくれる(無限ループ)
先ほどのプログラムを見ると分かったかと思いますが、プログラム書く量がめちゃ減ります
その分より高度なプログラムを作ることが可能です
また、条件をうまく設定してあげれば、ボクらが寝ている間でも文句ひとつ言わずにずーっと働いていてくれます
ここからはそんなwhile文の使い方を解説していきます
基本的な使い方
(このブログを作成する時にWindows10、Python3.9のIDLEを使用しました)
while文の基本構文
そんな超便利なwhile文なので、扱いも難しそうだと感じるかもしれませんが、実はwhile文を扱うのに用意するモノは基本的に2つだけです
②「どんな繰り返し処理をさせたいか(処理内容)
この2つが用意できたら、この構文に沿ってプログラムを書いていくだけです
1 2 |
while (発動条件): 繰り返し内容 |
繰り返し内容はTabキー1つ分(スペースキー4つ分)スペースが空いています
(これに関しては後ほど詳しく説明)
ただ、これだけでは実際に使いづらいと思うので、ここからは実際に具体例となるプログラムで遊びながら見ていきましょう
カンタンな具体例
それでは冒頭で出したこちらのプログラムを見ていきましょう
1 2 3 4 |
i = 0 while i<=10: print(i) i+=1 |
②繰り返し内容:「print(i)」と「i+=1」
1つずつ順番に見ていきましょう!
①while発動条件:「i<=10」
発動条件は「iが10以下の場合」です
今回1行目でiには0が代入されていました!
つまりこのwhile文の発動条件が整っているのでwhile文の中身の処理がスタートします
(もし条件が整っていなかった場合、while文の中身はスルーされます)
②while繰り返し内容
今回は2つの繰り返し処理が書かれています
1つ目の「print(i)」ではiに代入されている値を出力します
(最初は0が代入されていたので、0が出力されてます)
「while文とセットでお得」複合代入演算子
2つ目の「i+=1」は??を浮かべた人が多いと思います
これは複合代入演算子なんて言われたりしますが、数学には出てこない、プログラミング特有の表現ですので、完全に初見殺しの考え方です
ここでは簡単な説明を行いますが、別の記事でより詳しい解説を行っていますので、分からなければこちらの記事もご覧ください
・「i = i + 1」の省略系
・今まで扱っていたi(右辺のi)に+1した値を次のi(左辺のi)に代入
今回のプログラム1行目ではiに0を代入していました。
つまり、左辺のiには右辺のiの値である0と1を足した値が代入されることになります(0+1を左辺のiに代入)
このように途中から代入する数字を変えていくことはプログラミングではよく行います
細かい話が難しいという方はここだけ覚えておけば大丈夫です!
ループでの一連の処理をまとめてみるとこんな感じになります
これらの操作をwhile文の発動条件が満たされている間はずっと行われます
うまくいかない原因(エラー文のチェック項目)
実際にプログラムを自分の手で入力して実行してみるとエラー文が出てきてうまく進めない場合が出てきます
そこでここからは初心者の方が陥りやすいミスをまとめました!
思うようにプログラムが表示されなかった場合はこちらの内容を参考にしてみてください!
インデントエラー
Pythonにおいてwhile文の繰り返し処理内容を書く時にはインデントという字下げが必要です
「インデント!?ナニソレ???」
と思う方も多いと思うので、ザックリとした内容をまとめてみました
Tabキー1つ分、あるいはスペースキー4つ分を入れて、字下げする行為のこと!
こんなエラー文が出たらインデントを見直してみて!
IDLEの場合ですが、このようなエラーメッセージが表示されたら、このインデントをチェックしてみると正常に動く可能性が高いです
コロン付け忘れ
while文の書き方をよく見てみると、発動条件の後に「:(コロン)」が付いていますね!
初心者の方にありがちなのはこのコロンの付け忘れがあります
こんなエラー文が出たら「:(コロン)」を見直してみて!
こんなエラーメッセージが出てきたら、発動条件の後にある「:(コロン)」が付いているかどうかチェックしてみましょう!
IDLEの場合はどこにエラーがあったかを赤くマークしてくれているのでとても分かりやすいと思います!
全角入力(スペースは特に気づきにくい)
中には
「え!?ちゃんと一字一句同じなのにエラー出るんですけど!」
という人もいるかもしれません
そんな時は全角入力になってないかチェックしてみてください!
Pythonは基本的に半角入力で動きます
全角入力と半角入力はキーボードの左上で変更できます
こんなエラーが出たら半角になってるか見直してみて!
IDLEでこんなエラーメッセージが出たら、全角入力になっている可能性が高いです!半角入力にしてみましょう!
特にスペースが全角になっている時はマジで気づきにくいです!
一度消してみて、半角入力になっているかチェックしてからもう一度入力してみてください!!
便利な使い方(while文応用編)
ここからはwhile文の便利さをもう少し体験できるような内容にしていきます!
数が多くてめんどうな計算を瞬殺
さて、こんなプログラムを作って遊んでみましょう!
日本では9の段までしか小学校で習っていませんが、
インドでは20の段まで習うことは有名な話です
13の段がスッと出てこないボクらは終わりかというとそうではありません!
ボクらにはPythonがあります!
ということで13×13までの計算を全て出力するプログラムを作ってみましょう
プログラム内容とプチ解説
ちなみにボクが考えたプログラムは以下の通り
(これ以外にも正解はたくさんあります)
1 2 3 4 5 6 |
a = 13 i = 1 while i<=13: print("13*",i,"=",a*i) i =+ 1 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
(実行結果) 13* 1 = 13 13* 2 = 26 13* 3 = 39 13* 4 = 52 13* 5 = 65 13* 6 = 78 13* 7 = 91 13* 8 = 104 13* 9 = 117 13* 10 = 130 13* 11 = 143 13* 12 = 156 13* 13 = 169 |
ここでは
②繰り返し内容→「 print("13*",i,"=",a*i)」と「i =+ 1」
となっています!
繰り返し内容のprint()では" "(ダブルクォーテーション)で囲まれた文字列と数字をコンボで出力しています
無限ループ
無限ループとは永遠にプログラムが終わらないことです
実はwhile文の発動条件をいじると無限ループが完成します
プログラム内容とプチ解説
発動条件を「True」にしておけば、無限ループにすることができます
1 2 |
while True: 繰り返し内容 |
実際のプログラムにするとこんな感じ
1 2 |
while True: print("無限ループ中") |
※最初はビックリすると思いますが、故障ではないのでご安心ください
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
(実行結果) 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 無限ループ中 ... |
無限にprint()の中身が出てきます
その際にこれは必ず覚えておきましょう!
え、こんなん何に使うの??
話しかけられるまでは何も出力せずに無限に待つ。もし話しかけられたら(If文)答えを返す
自動化にめちゃ使えるというわけです!