HOME/ AINOW編集部 /ゼロからPython塾 第6回【Chapter5】一番大事な文法「if文」!
2017.07.11

ゼロからPython塾 第6回【Chapter5】一番大事な文法「if文」!

最終更新日:

こんにちは、さのです。元気です。

 BACK NUMBER 

前回(第5回)の記事はこちらこちら。まだ読んでない人はぜひ!

AI専門ニュースメディア AINOW
AI専門ニュースメディア AINOW
https://ainow.ai/2017/06/08/113088/
日本最大級のAI・人工知能専門メディア

 

まずは前回の復習クイズの答え合わせから始めましょう!ちょっと難しかったですかね…でも前回の内容をしっかり理解していればできたはず!

list = [12, 60, 28, 19, 33] + [59, 41, 104]
print(list)
list.remove(59)
list.sort()
list.reverse()
print(list)
[12, 60, 28, 19, 33, 59, 41, 104]	
[104, 60, 41, 33, 28, 19, 12]

この解答例と全く同じである必要はないです!要は出力結果が同じならいいので、例えば3行目「list.remove(59)」が「del list[5]」でももちろん大丈夫です!

どこから見ていけばいいのかから考えていきましょう。まず、出力結果が2行あるので、print関数が2つあるなと気付けるはずです。次に、1行目の結果から、問題文の配列に [59, 41, 104] 追加されていることに気が付きます。そこに気付いたらまずはそれをprint関数で出力すればいいのです。

さて問題は次です。1行目との違いは何でしょうか。59の要素が消え、順番が降順になっていますね。それに気づければもう簡単です。まずremoveメソッドで要素59削除し、いったんsortメソッドで昇順に並び替えてからreverseメソッドでそれを逆順にします。「removeメソッド」→「sortメソッド」→「reverseメソッド」という順で説明しましたが、もちろん「sortメソッド」→「reverseメソッド」→「removeメソッド」でも「sortメソッド」→「removeメソッド」→「reverseメソッド」でも同じ出力になりますね。その辺も確認しておいてください!

 

さて本日は何をやるかといいますと、プログラミングを学ぶ上で1番大切といっても過言ではない、「if文」を学んでいきます。その名の通り、「もし~だったら」というプログラミングです。どの言語をやっても必ず出てきますので、ここでマスターすれば他の言語をやるときにも応用可能です。絶対覚えないと先に進むことのできない重要な文法なので、気合を入れていきましょう!

 目次 

【Chapter5】一番大事な文法、「if文」!

まずはifとelse
elifで分岐させてみよう

andとor
複雑なプログラムを書いてみよう(input関数)

 

if文(基本編)

一番大事だから気合を入れましょう!と先ほど言いましたが、そんなに難しくはないので心配はいりません!

まずはifとelse

まずはホントにキソのキソから。ifというのは「もし~だったら」という意味です、中学校でやりましたね。「~」はifの後ろに書いてある条件のことです。elseも中学レベルの英単語で、「他に」とか「そうでないならば」という意味の副詞ですね。このまんまの意味でプログラムが動きます。

早速プログラム例を見ていきましょう。

a = 100
if a > 100:
    print('more than 100')
else:
    print('100 or less')
100 or less
※「more than 100」は「100より大きい」、「100 or less」は「100以下」という意味です。

まず、1行目でaに100を代入しましたね。「=」は代入ですよ、覚えていましたね?

2行目に今回のテーマであるif文が使われています。先ほど説明したルール通りに理解すると、「もしa>100だったら」ということですね。そしてprint関数があります。「もしa>100だったら」、このプログラムにつながります。しかし今回はaは100なので、a>100ではありませんね(a>100というのは100よりも大きいという意味なので、100は含まれません)。つまりこの「print(‘more than 100’)」にはつながらず、この行は実行されないのです。

このまま終わるわけにはいきません。ということで「そうでないならば」を意味するelseがあるのです。ifの条件が正しくなかったら、if文の次の行には進まず、その次のelseに進みます。elseはそれ以外ということなので、ifでないならば100%elseですね。以上の流れでelseの次の行のprint関数につながり、それが結果として出力されるのです。

ちょっとややこしかったですかね。aの値を変えてやってみましょう。

a = 110
if a > 100:
    print('more than 100')
else:
    print('100 or less')
more than 100

先ほどのaの値を110にしてみました。すると、出力結果が「more than 100」となりましたね。今回は「もしa>100だったら」の条件をクリアしているので、次の行の「print(‘more than 100’)」が実行されたというわけです。今回はelseまでプログラムが進む必要がなかったということになります。

if 〇〇〇〇:
	◇◇◇◇
else:
	△△△△

〇〇〇〇の条件に当てはまったら◇◇◇◇へ!
当てはまらなかったらelseで△△△△へ!

※if、elseのあとのコロン「:」を忘れずに!!

 

elifで分岐させてみよう

ifとelseでは2つにしか分岐させることができませんでしたね。もっと分岐させたいと思ったはず。それをかなえてくれるのがelifと呼ばれるものです。else ifを短縮したものです。elseとifが混ざったので、「そうでないならばもし~」という意味です。プログラム例を見ていきましょう。

a = 100
if a > 100:
    print('more than 100')
elif a < 100:
    print('less than 100')
else:
    print('a is 100')
a is 100

まずifで「もしaが100より大きかったら」ということを表しいています。今回aは100より大きくないので、その下のprint関数が無視され、その次のelifに進みます。最初のifの条件に当てはまらなかったら、先ほどの2分岐ではelseに進みましたが、elifがあるとこちらに進みます。このプログラムでelifは「aが100未満だったら」という条件を表しているので、今回はこの条件も当てはまりません。だから次のprint関数は実行されず、その下にあるelseに繋がってそのprint関数が実行され、「a is 100」 と出力されました。

もっと分岐させることだって可能です。

a = 120
if a < 30:
    print('less than 30')
elif a < 60:
    print('less than 60')
elif a < 90:
    print('less than 90')
elif a < 120:
    print('less than 120')
elif a == 120:
    print('a is 120')
else:
    print('more than 120')
a is 120

今回は5個目の条件(4個目のelif)のである「a == 120」が当てはまったので、その下のprint関数である「a is 120」が実行されましたね。「a == 120」となぜ「=」が2つあるのでしょう。「=」が1つだと代入するという意味でした。それとの違いを出すために、数学的な等号を表すときは「=」を2つ書くというルールがあるのです。数学記号を下にまとめておくので、一気に覚えちゃいましょう!

数学記号 演算子
<(不等号) <
>(不等号) >
≦(等号付き不等号) <=
≧(等号付き不等号) >=
=(等号) ==
≠(ノットイコール) !=
×(掛け算) *
÷(割り算) /
+(足し算) +
ー(引き算)
余りの計算(剰余) %

 

elifの使い方をまとめると、こんな感じです。そんなに難しくないですね!

if 〇〇〇〇:
	◇◇◇◇
elif ■ ■ ■ ■:
	□□□□
elif ◆◆◆◆:
	◎◎◎◎
else:
	△△△△

ifに当てはまらなかったらelifへ!
全部当てはまらなかったらelse!

※if、elif、elseのあとのコロン「:」を忘れずに!!

 

if文(応用編)

基本編が分かっていれば、すんなり分かると思います!Let’s Go!

andとor

これまでは、1つのifやelifにつき、条件を1つしか追加できませんでした。ここからは、and(かつ)とor(または)を使うことで、2つ以上の条件を追加できるようになります。

a = 500
if a < 0 : print('less than 0') elif a > 0 and a <= 100 : print('a is between 1 and 100') elif a > 0 or a <= 100 :
    print('more than 0 or less than 100')
else:
    print('a is not number')
more than 0 or less than 100

最初のifは「aは0より小さい」という条件です。この条件は間違っているので、次のelifに進みます。ここでandが使われていますね。「aは0より大きい”かつ”100以下」という条件です。この「かつ」を表せるのがandで、andで繋いだ2つの条件がどちらも当てはまったら正しいとみなされ、その下のprint関数へ進みます。ただしaは500なのでこれも違います。さらに次、elif「aは0より大きい”または”100以下」という条件です。この「または」を表すのがorで、orの前後のどちらかの条件が当てはまったら正しいとみなされます。今回は0より大きいという条件の方に当てはまったのでその下のprint関数が実行されました。

最後に書いてある「aは数じゃないよ」という意味は分かりますか?3つ目の条件である「aは0より大きい”または”100以下」というのは、数字すべてのことですよね(虚数があるよとかいうクレームは受け付けません)。つまり3つ目の条件で当てはまらず、elseにプログラムが進んだ時点でそれは数字ではないよということです。

複雑なプログラムを書いてみよう(input関数)

複雑なプログラムを書く前に、1つだけATOMの設定をします。パッケージを追加しましょう。

①ファイルから環境設定を開く

②「Install Packages」の検索窓で「platformio-ide-terminal」と検索し、それをインストール

なんのための作業だったかというと、書いたプログラムを実行するためのものです。atom-runnerでいいじゃんと思うかもしれませんが、それではできない実行をこれからするので、このターミナルというパッケージをインストールしました。

ではやっていきましょう。atom-runnerで実行できないのは、入力を伴うプログラムです。今までは、「a = 〇」とプログラムの頭で定義していた〇の数字についてしかif文で実行できてませんでした。しかし、入力を伴えるということは、その場その場で好きな数字を入力できるということです。プログラム例を見てみましょう。


a = int (input('あなたの年齢を教えてください>>'))
print('あなたの年齢は%d歳です' %a)
	
if a >= 20 and your_age < 30: print('20代です。若いですね!') elif a >= 30 and your_age < 40: print('30代です。仕事盛りですね!') elif a >= 40 and your_age < 50: print('40代です。人生もあと半分です!') elif a >= 50 and your_age < 60: print('50代です。これまでお疲れ様です!') elif a >= 60:
    print('60才以上です。残りを楽しんでください!')
else:
    print('未成年です。お酒を飲んではいけません!')

ifやelif、elseの中身については今までと同じ分岐の仕方ですので、簡単ですね。

今までと異なる点は最初の行です。aを具体的な数字で定義していません。これが入力を伴うことのできるinput関数です。inputと記すことで、そこにプログラムを実行したあとから数字を入力していいですよという合図を送れるのです。

今回は年齢を入力してくださいということなので、「int」で整数を入力するinput関数になっています。これを先ほどインストールしたターミナルで実行してみましょう。

画面左下のプラスボタンを押してください。ターミナルが起動します。そこに、pythonと書き、そのあとに今プログラムを書いているファイルの名前を入力します。そしたらEnterキーを押してください。

あなたの年齢を教えてください>>

と出ましたね。そこに自分の年齢などを適当に入れてみてください。その年齢にあったプログラムが実行されますね。

あなたの年齢を教えてください>>45
あなたの年齢は45歳です
40代です。人生もあと半分です!

このように、input関数を使うと、プログラムの中身をいじる必要がなく、代入する数字を変えることができるのです。便利ですね。


input関数は実行後からでも文字入力を受け付ける!

2行目にも何気にはじめてみるものがありますね、%dとはなんでしょう。これは事前に定義したものをprint関数内に挿入、置換できるという役割を持ちます。イメージとしては、第4回で挿入させたいとき+を用いましたよね、それの応用版です。

今回の例では、%dにaで定義した年齢を置換したいので、%aという記述がくっついてますね。置換したいaが整数なので、%dという記述になっています。つまり、置換したいもの(文字列か整数か小数か)によって%〇の〇の部分は変わってきます。それを次にまとめます。

整数aを挿入したいとき:%d print(‘%dは整数です’ %a)
小数bを挿入したいとき:%f print(‘%fは整数です’ %b)
文字列cを挿入したいとき:%s print(‘%sは整数です’ %c)

ここで1つ注意点。このif文を書く上で、このようなミスをする人たちが多発しています。

	
	
a = int (input('あなたの年齢を教えてください>>'))

if a >= 20:
    print('20代です。若いですね!')
elif a >= 30:
    print('30代です。仕事盛りですね!')
elif a >= 40:
    print('40代です。人生もあと半分です!')
elif a >= 50:
    print('50代です。これまでお疲れ様です!')
elif a >= 60:
    print('60才以上です。残りを楽しんでください!')
else:
    print('未成年です。お酒を飲んではいけません!')
	

なにがダメかわかりますか?45歳と入力した場合を考えてみましょう。先ほどのように、「40代です。人生もあと半分です!」が出力されなければなりませんので、「elif a >= 40:」が正しくないといけません。しかしそれ以前の「if a >= 20:」も正しいですね。そのためまずはそこのプログラムが先に実行されてしまうので、「elif a >= 40:」にたどり着かずに終了してしまうのです。

このように、if文では被りなく書く必要があります。

いかがだったでしょうか。最後のinput関数はちょっとややこしかったかもしれませんが、本日のメインであるif文はしっかり分かっていただけたと信じています。では最後にクイズです!これができたら今日の内容完璧です!今までにやった知識をフルに使って解いてみてください!


身長[m]と体重[kg]を入力すると、BMIを計算してそれを表示し、さらにその値によって健康状態を判別するプログラムを作ってください。
BMI値は(体重[kg])÷(身長[m])^2 で計算されます。それによって計算されたBMI値が18.5未満だと「痩せ型です、太りましょう!」、18.5以上25.0未満だと「標準です、健康!」、25.0以上だと「肥満です、痩せましょう!」と表示してください。
身長を入力してください>>○○
体重を入力してください>>□□
あなたのBMIは◎◎です
標準です、健康!

 

※私はWindows派なので、この記事の通り進めていくとMacを使っている方はうまくいかないことがあるかもしれません。が、お許しください。もしご要望があれば、頑張って対応していきたいと思います。ちなみに私はDELLのXPS13、Windows10でやっています。
※記事を読んでいて「おかしいぞ?」とかプログラミングをして「実行してもエラーだぞ?」などあったら遠慮なく以下のメッセージから教えてください。お願いします!その他疑問も受け付けております。

最後まで読んでいただきありがとうございました。

 NEXT NUMBER 

次の回(第7回)を公開しました!このまま次へGO!

ではまた!!!!!!

無料メールマガジン登録

週1回、注目のAIニュースやイベント情報を
編集部がピックアップしてお届けしています。

こちらの規約にご同意のうえチェックしてください。

規約に同意する

あなたにおすすめの記事

生成AI時代の人材育成|海城中学高等学校物理部「AI班」を作った卒業生の次なる挑戦

「生成AI基盤の最新トレンド ~AIをすべてのデータに~」が7月30日より開催

Generative AI Japan|産官学連携で世界に通用する競争力の獲得を目指す

生成AI時代の人材育成|海城中学高等学校物理部がAI班を作ったワケ

GPT-4oはクレイジーだ―思わず言葉を失うような(信じられない)6つの使用例を紹介

社内の生成AIにおける「回答精度の低さ」をどう克服する?|株式会社クレディセゾンCTOに訊く

博報堂DYグループの挑戦|Human-Centered AI Institute が問うAIと人間の新しい関係性

“現実と仮想の境界線を越えたエンターテイメントとは?” |川田のロンドン体験レポート

あなたにおすすめの記事

生成AI時代の人材育成|海城中学高等学校物理部「AI班」を作った卒業生の次なる挑戦

「生成AI基盤の最新トレンド ~AIをすべてのデータに~」が7月30日より開催

Generative AI Japan|産官学連携で世界に通用する競争力の獲得を目指す

生成AI時代の人材育成|海城中学高等学校物理部がAI班を作ったワケ

GPT-4oはクレイジーだ―思わず言葉を失うような(信じられない)6つの使用例を紹介

社内の生成AIにおける「回答精度の低さ」をどう克服する?|株式会社クレディセゾンCTOに訊く

博報堂DYグループの挑戦|Human-Centered AI Institute が問うAIと人間の新しい関係性

“現実と仮想の境界線を越えたエンターテイメントとは?” |川田のロンドン体験レポート