Python3入門|初心者対象!【第2回】if文(制御構文①)

Pocket

はじめに

こんにちは!筆者の鹿丸です。この記事はプログラミング未経験者の方を対象に、Python3の基礎の基礎~応用までを無理なく身に付けていただくための連載記事です。

今回は当連載記事(Python3入門|初心者対象!シリーズ)の第2回目にあたります。

前回の記事(第1回)は「Python3入門|初心者対象!【第1回】環境構築とはじめてのプログラミング」です。

はじめてプログラミングを学ぶ方は第1回から順に読み進めて頂くことをおすすめ致します。

さて、【第1回】ではPython3のインストールと環境構築からはじめREPLを使って様々なプログラミングの基本知識を学びました。

今回はまずPython3の基礎知識の続きから入ります。最終的には最も基本的な制御構文であるif文を学びます。

REPLでもっと計算しよう

最初にREPLの起動方法の復習から入りましょう。Windows環境の方はコマンドプロンプトを開いてpythonと入力します。Mac OS X環境の方はターミナルを開いてpyhon3と入力します。

さてREPLが開いたところで今回はもっといろいろな計算をしてみましょう。第1回では四則演算しか扱いませんでしたからね!

Python3の四則演算の算術演算子を覚えていらっしゃるでしょうか。問題ないとは思いますが、念のため確認致しましょう。加算が「+」、減算が「-」、掛け算が「*」、割り算が「/」でしたね。

Python3に入門するにあたって、四則演算以外の算術演算子を覚えることも大切です。以下に様々な計算方法の一覧を掲載しますね。

算術演算子 意味 例の結果
x // y xをyで割った商の小数点以下切り捨て 15 // 6 2
x % y xをyで割ったときの余り 5 % 2 1
x ** y xのy乗 2 ** 3 8
abs(x) xの絶対値 abs(-5) 5
round(x, n) xをn桁に丸める round(3.14, 1) 3.1

この節では特にサンプルプログラムを設けませんので、上記の表を参考に「ふーん!こういうのもあるんだなあ」くらいのニュアンスで適当にREPLで遊んでみてはいかがでしょうか。

Python3の文字列についての補足事項

前回はごく基本的な文字列の扱いを学びましたね。ここでは前回説明しきれなかった文字列の使い方を学んでいきましょう!

複数行に渡る長い文字列を一括処理する方法

複数行に渡る長い文字列でも三重引用符を用いれば一括に扱うことができます。

サンプルプログラムを通じて三重引用符の使い方を学びましょう。

【サンプルプログラム6-1】

上記のサンプルプログラムのようにして三重引用符を使います。

是非REPLに打ち込んで試してみて下さい。

実行結果は以下のようになります。

(空白行)
Python3は楽しい言語です。
プログラミングの入門にも最適です。
少ないコードで多くの機能を実現できます!
(空白行)

コメントについて

プログラム中にPython3に解釈されない人間用のコメントを書くことができます。コメントは後からプログラムを見たときに「その部分が何をしているのか」を知るために使います。

読みやすいプログラムを作成する上でコメントは必須です。

Python3のコメントは#に続く部分になります。

実際にコメントを含むサンプルプログラムを見て、コメントのイメージを掴みましょう。

【サンプルプログラム7-1】

どうでしょうか、プログラム中にコメントを書き込む感覚を掴めましたか?

これからプログラムを作成する際はなるべくコメントを入れる癖をつけるといいでしょう。

REPLを卒業してテキストエディタでPython3を書こう!

この節ではテキストエディタを利用してPython3のプログラムを書く方法をご説明いたします。OSに付属のテキストエディタでも書けないことはないのですが、やはり機能的に辛いところがあるので、プログラム開発を前提として設計されているテキストエディタを利用されることを強くおすすめします。

WindowsでもMac OS Xでも利用でき、Python3プログラミングに適している無料のテキストエディタとしてはATOMが最も人気です。

またこれはWindows専用のテキストエディタではありますがNotepad++も人気のある無料テキストエディタですね。

テキストエディタを使ったPython3プログラムの保存と実行方法

Python3のコードを保存するには「.py」という拡張子を用います。また保存時の文字コード(エンコード)は必ずutf-8を選んで下さいね。今時のテキストエディタはどんなものでも保存時の文字コードを選択できるようになっています。

この後、テキストエディタでコードを書いた場合の実行方法を解説するので、いまのうちにテスト用のPython3ファイル(~.py)を予め作成しておきましょう。

試しに任意のテキストエディタを開き、print(“test”)とだけ入力し、文字コード※1を必ずutf-8に設定した上で.pyの拡張子で保存します(ファイル名はなんでも構いませんがtest.py等とすればいいでしょう)。

※1ATOMエディタを使っている場合は何も意識しなくてもデフォルトの文字コードはutf-8になっています。

テキストエディタに保存したPython3のコードを実行するには、Windows環境の場合はコマンドプロンプトでpython ファイル名.pyと入力します。Mac OS X環境の場合はターミナルで
python3 ファイル名.pyと入力します。

またコマンドラインからPython3ファイル(~.py)を実行する方法とは別に、Python3をインストールしたときに付属しているIDLEというツールから実行する方法もあります。コマンドラインの使い方がいまいち分からない場合にはIDLEを使ってPython3ファイルを実行するといいでしょう。

IDLEを使ってPython3ファイルを実行する方法

①まずIDLEを起動します。Windows環境であれば[スタートメニュー>Python3.x>IDLE]を選択します。Mac OS X環境の場合はSpotlightにIDLEとタイプして起動します。

②下記の画像を参考に[File]>[Open]を選択します。

③予め保存しておいたPython3ファイルを選択し、開きます。

④下記の画像を参考に[Run]>[Run Module]を選択します。

⑤するとPython 3.x.x Shell上でプログラムが実行されます。

ユーザーから入力を受け取る方法を学ぼう!

ユーザーからの入力を受け取るにはinput()関数を使います。

この関数を利用する上でのポイントはユーザーから入力された値は、例えそれが数値であっても必ずstr型(文字列型)だという点です。

例えばユーザーが数値の10を入力しても内部的には“10”として扱われるのです。

そのためユーザーから数値の入力を受け取り、その「文字列としての数値」をそのまま計算に利用しようとすると「文字列型の値」と「整数型などの数値」は計算することができないのでエラーになってしまいます。

10*2は計算可能ですが、“10”*2は型の不一致で計算できないのです。

そこで数値の入力を受け取った場合は、「文字列としての数値」をint型などに型変換してあげる必要があります。

尚、int型への型変換はint()関数を使うのでしたね!

それでは以上の知識を踏まえテキストエディタを使ってユーザーからの入力を取得し、計算をした上で画面に表示するサンプルプログラムを書いてみましょう。尚コメントは必ずしも写し取る必要はありません。解説の都合上、多めにコメントを書いているためです。

【サンプルプログラム8-1】

このサンプルプログラムを実行すると、「数値を入力して下さい。」と画面に表示され入力待ち状態になります。そこに半角で任意の整数値を入力すると二乗された値が画面に表示されます。

input_numが受け取る数値はstr型なので、あとで計算時に型の不一致を起こさないように、int()関数で整数に変換した上でnumにその値をセットしています。あとは二乗して画面に出力するだけです。a**bで「aのb乗」という意味でしたね。

制御構文①if文をマスターしよう

制御構文とは条件分岐や繰り返し処理のことを意味します。今回はそんな制御構文の中でももっとも基礎にあたるif文を学びます。

if文は条件分岐のための構文です。条件分岐とは「もし~ならば…する」という処理です。今までのプログラムではコード中に書かれた全ての処理を実行していましたが、if文を使うことで、ある条件下でのみ実行する処理を書くことができます。

例えば今月が誕生日月ならば画面に「おめでとう」と表示し、そうでないならば何もしない。といった処理が条件分岐の基本的な処理です。

条件分岐をマスターすればさらに複雑なプログラムを書けるようになりますね!

if文の構文は下記の通りです。

「比較式」というのが出てきましたね。比較式は2つの値を比較演算子で比較します。例えば、「左辺と右辺が同じである」を意味する比較演算子は==です。

ではまず、比較演算子(==)の使い方に慣れておきましょう。

REPL(IDLEでもOK)を起動し、下記の例文を打ち込んでみて下さい。

例文1:3 == 3

例文2:3 == 5

すると、3 == 3を入力するとTrueと返ってきますね。左辺と右辺が等しいので真(True)です。

さらに、3 == 5と入力するとFalseと返ってきますね。左辺と右辺が等しくないので偽(False)ですね

このように比較演算子は左辺と右辺の関係性を評価し、TrueもしくはFalseという結果を返します。

==以外にも比較演算子はいくつかありますのでまずそれらを眺めてみましょう。

【Python3における比較演算子一覧】

比較演算子 意味 利用例 利用例の評価結果
a == b aとbは等しい 3 == 3 True
a != b aとbは等しくない 3 != 3 False
a > b / a < b aはbより大きい/aはbより小さい 10 > 5 True
a >= b aはb以上 10 >= 10 True
a <= b aはb以下 5 <= 3 False

ちなみに比較演算子が返すTrue/Falseという値はbool型の値です。いつも「型」を意識するようにしましょうね!

それではサンプルプログラムを通じてif文の基本的な使い方に慣れていきましょう!

【サンプルプログラム9-1】

まずはユーザーから1~10の値を入力してもらいます。その値をinput_dataに格納します。

input_dataに入力されている数値はstr型の数値なので、これをint()関数で型変換し、変数numに格納します。

if文ではもしnumが10より大きな値であれば、print(“ERROR:1~10の整数値を入力して下さい。”)を実行します。そうでなければprint(“正しい数値を入力してくださりありがとうございます。”)を実行します。

もしこのプログラムに7という値を入力したならば(num > 10)の評価結果はFalseになり、else:から下の行が実行されますよね。

もしこのプログラムに15という値を入力したならば(num > 10)の評価結果はTrueになり、
print(“ERROR:1~10の整数値を入力して下さい。”)が実行されますよね。

実際に1~10の値(正しい値)を入力したり、15等の間違った値を入力してみて動作のイメージを掴みましょう。

 

さらにもう一つ、if文を使ったサンプルプログラムを通じて勉強しましょう!

【サンプルプログラム9-2】

#1ではユーザーから文字列型の数値を受け取っています。

#2では文字列型の数値をint型に変換した上でnumに代入していますね。

#3ではnumの値が1ならばTrueとし、Trueのとき実行される処理として
print(“あなたは「1」を入力しましたね!”)が指定されていますね。

#4 if(num == 1)の結果がFalseの場合、else:以下の処理が実行されます。

elif文を使ってもっと複雑な条件分析処理を書こう!

【サンプルプログラム9-1】、【サンプルプログラム9-2】では、条件式が1つしかありませんでした。しかし、もっと複雑な条件分岐を作ることもできます。そのためにはelif():文を使います。読み方は「エリフ」と読みます。

elif():文は直前のif文またはelif():文の条件式の評価結果がFalseの場合、さらに条件式を追加して判断を行うのに用います。

使い方はelif(条件式):とします。実際にサンプルプログラム写して実行してみた方がイメージが掴みやすいと思います。なので、今回は「英語のテストの点数(0~100)」の値によって、より複雑な条件分岐をするサンプルプログラムを通じてelif():文を学びましょう!

【サンプルプログラム9-3】

一行目から順に【サンプルプログラム9-3】の挙動を解説していきますね

まずinput_dataにユーザーからの文字列型の数値を受けとります。

次に英語の点数を表すenglish_scoreにユーザーからの入力値をint型に変換した整数値を代入します。

if(english_score == 100):

この式はおなじみのif文ですね。英語の点数が100点ならば、print(“S-満点です!すばらしい!”)という処理を行い、これでプログラム全体が終了します。なねならelif():は直前のif文またはelif():文がFalseの場合にはじめて実行される条件式だからです。

英語の点数が100点満点でないならば(直前のif文の条件式がFalseならば)
elif(english_score >= 80): # 英語の点数が80点~99点の場合に処理が移ります。もしこのとき、英語の点数が例えば85点ならば、print(“A-優秀な成績です!”)という処理を実行して、このプログラムは終わります。

しかし、上記のelif():の中の条件式の結果がFalseであれば、
elif(english_score >= 60): # 英語の点数が60点~79点の場合に処理が移り、改めてここで条件式が評価されます。

もしここで、上記のelif文の条件判定がFALSEならば、以下の2行が実行されます。

else: # 英語の点数が60点未満(0点~59点)の場合
print(“C-赤点です!再テストです!”)

 

このサンプルプログラムを写して実行できたら、1-100の範囲内で様々な整数値を入力してみてプログラムの挙動をチェックしてみて下さい。elif文を用いた条件分岐の感覚が掴めると思います!

if文の中にif文を入れる(入れ子のif文)

if文の中に、さらにif文を入れることをif文を「入れ子」にすると言います。

この節では「入れ子のif文」を学習していきましょう!

下記のサンプルプログラムでは英語の点数が40点以上であれば合格。英語が40点未満であれば基本的には不合格。但し、英語の点数が40点未満でも国語の点数が60点以上であれば合格。というロジックをif文の入れ子で表現したものです。

尚、英語の点数は15点。国語の点数は70点とします。

【サンプルプログラム9-4】

順番に解説していきますね!

if(english_score < 40):は英語の点数が40点未満ならばTrueですね。今回、英語の点数は15点と40点未満なので、Trueですね。もしこのときFalseならば、下から二行目のelse文にジャンプし、
print(“英語の点数が40点以上なので合格です。”)が実行され、プログラムは終わりますね。

しかし今回は英語の点数は15点なので、if(japanese_score >= 60):に処理が移行します。国語の点数は70点なので、この条件式の結果はTrueですね。従って、直下のprint()関数が実行され、
画面には英語の点数が40点未満でも国語の点数が60点以上であれば合格です。と表示されます。

もし国語の点数が45点だとしたらif(japanese_score >= 60):の評価はFalseとなり、
else: # 国語の点数が60点未満の場合に飛びprint(“不合格です。”)が実行されますね。

 

「if文の入れ子」についてイメージができてきたでしょうか!?

条件式を複雑化するandとor

今までの例題では条件式は(〇>▲)という形式の単一のものでした。しかしandとorを用いることで条件式それ自体をより複雑化することができます。

andは「かつ」という意味です。またorは「または」という意味です。

and/orを用いた条件式の書式は以下の通りです。

if((条件式1) and (条件式2)):
⇒条件式1も条件式2も両方とも「真」であれば全体としてTrue

if((条件式1) or (条件式2)):
⇒条件式1か条件式2のどちらか一方が「真」か若しくは全ての条件式が「真」であれば全体としてTrue

尚、条件式の個数に制限はありません。例えば下記のような書き方もできます。

if((条件式1) and (条件式2) and (条件式3) and (条件式4)):

それでは【サンプルプログラム9-4】でif文を入れ子にすることで実現したロジックをorを使って実装してみましょう。

ロジックは英語が40点未満の場合でも国語が70点以上であれば「合格」。というものです。

尚、英語の点数は15点。国語の点数は70点とします。

【サンプルプログラム9-5】

条件式(english_score >= 40)と条件式(japanese_score >= 70)orで連結されていますね。

(条件式1) or (条件式2)となっている場合、どちらか一方の条件式がTrueであれば全体としてTrueになりますよね。

英語の点数に関する条件式は15 <= 40でFalseですが、国語の点数に関する条件式は70点以上なのでTrueです。どちらか一方の条件式がTrueであれば全体としてTrueになるので、
print(“合格です。”)が実行され、その下のelse文以下は無視され、プログラムは終了します。

次は以下のロジックを条件式だけで実装してみましょう。

「英語の点数が70点以上で、尚且つ、国語の点数が50点以上であれば合格」

【サンプルプログラム9-6】

((条件式1) and (条件式2))は条件式1、条件式2がどちらともTrueのとき全体がTrueになるのでしたね!

このサンプルプログラムではどちらもTrueなので、print(“合格です。”)が実行され、プログラムが終了する。という流れですね!

では続いて今度は下記のロジックを条件式で実装してみましょう。

「英語が60点以上でかつ国語が60点以上であれば合格。但し、英語か国語のいずれか一方で90点以上得点できていれば、もう一方の科目の点数が何点であっても合格とする」

尚、andやorで結ばれた条件式をさらにまとめるには、さらに外側に括弧を追加し、例えば以下のように書きます。

((条件式1) and (条件式2)) or (条件式3)

【サンプルプログラム9-7】

実行結果を想像することができますか?

正解は「合格です。」が実行結果です。

条件式の部分を詳しく解説していきましょう!

((english_score >= 60) and (japanese_score >= 60))・・・①式

この①式は英語も国語も60点以上のスコアならばTrueという意味の式ですね。

((english_score >= 90) or (japanese_score >=90))・・・②式

この②式は英語が90点以上かもしくは国語が90点以上ならばTrueという意味の式ですね。

①式 or ②式

となっていますから、
「英語も国語も60点以上」と「英語か国語のどちらか一方が90点以上」のどちらか一方がTrueでであれば(①式 or ②式)の全体の評価結果はTrueになりますよね。

で、今回は、英語90点、国語7点なので①式はFalseですが、②式はTrueですね。従って、式全体はTrueであり、print(“合格です。”)が実行され、プログラムは終了します。


次の講座へ進む>Python3入門|初心者対象!【第3回】for文・while文(制御構文②)

前の講座を復習する>Python3入門|初心者対象!【第1回】環境構築とはじめてのプログラミング

おわりに

お疲れ様でした!ここまで読んでいただき本当にありがとうございます!!

今回は制御構文の基礎にあたるif文による条件分岐を学びました。次回からは「繰り返し処理」という制御構文を学びます。特にelif文はプログラミングをしていく上で多用するので、重点的に復習されることをおすすめ致します。

あわせて読みたい