Python

【Python初心者】if文を使って条件分岐をしてみよう!

こんにちは(@t_kun_kamakiri)(‘◇’)ゞ

この記事ではPythonの条件分岐である「if文」の構文について解説します。

この記事で学ぶこと

  1. if文の書き方
  2. 比較演算子の理解
  3. 複数パターンの条件分岐:if~else
  4. 「and条件」と「or条件」
使用環境を示しておかないと混乱しそうなのでちゃんと書いておきます(^^)/
 

【Pythonの使用環境について】
Anaconda
Google Colaboratory
当ブログはこれをメインに使った計算結果です。

関連記事

 

☟書籍も紹介しておきます。
こちらの本がPython初心者が挫折することなく勉強できる本です。
(本記事のようのPython使用環境と異なりますが、とてもわかりやすいので全く問題ありません)

確かな力が身につくPython「超」入門 (確かな力が身につく「超」入門シリーズ)

確かな力が身につくPython「超」入門 (確かな力が身につく「超」入門シリーズ)

鎌田 正浩
2,728円(10/29 19:30時点)
発売日: 2016/03/16
Amazonの情報を掲載しています
スポンサーリンク

Pythonでのif文の書き方

まずは、Pythonのif文の書き方を解説します。

ポイント

  • if文の最後に「コロン」をつける。
  • コードブロックの区間を「インデント(字下げ)」をする。

条件式の部分に何を書くかというと「比較演算子」を書きます。

比較演算子を完全にマスターしよう

Pythonの比較演算子には以下の記述方法があります。

比較演算子内容
==a == b aとbが等しければTrue。
そうでなければFalse。
!=a != b aとbが等しくなければTrue。
そうでなければFalse。
>a > b aがbより大きければTrue。
そうでなければFalse。
<a < baがbより小さければTrue。
そうでなければFalse。
>=a >= baがb以上(bの値を含む)であればTrue。
そうでなければFalse。
<=a <=baがb以下(bの値を含む)であればTrue。
そうでなければFalse。
isa is baとbが同じオブジェクトであればTrue。
そうでなければFalse。
is nota is not baとbが同じオブジェクトでなければTrue。
そうでなければFalse。
ina in baがbの要素であればTrue。
そうでなければFalse。
not ina not in baがbの要素でなければTrue。
そうでなければFalse。
カマキリ

いっぱいあるのでコードを書きながら確かめてみてましょう。

比較演算子はたくさんありますが、ひとつひとつコードを書いていけば理解ができるとおもいます。

「a == b」:aとbが等しければTrue。そうでなければFalse。

実際にコードを書いてみましょう。

「x = 10」と指定し、if文で比較演算子によって真偽を確かめています。

  • 条件式が成立するなら➡真(True)
  • 条件式が成立しないなら➡偽(False)

【結果】

aとbは両方とも値が10なので、if文の中のprint文による出力で「aとbは10です。」と返ってきています。

このように、if文の後に比較演算子を書くことでif文の中の処理を行うかどうかを判断する処理を行っています。

「a != b」:aとbが等しくなければTrue。そうでなければFalse。

実際にコードを書いてみましょう。

【結果】

実際にコードを実行してみると、条件式を満たさないためprint文は読み込まれず、何も出力がされません。
これは、aとbは両方とも値が10なので、等しくない場合の条件であるif文の中の処理が行われないためです。

逆に以下のコードだとprint文の処理が行われます。

【結果】

「a=10」と「b=5」なので値は等しくありません。等しくない場合の条件であるif文の中の処理が行われて「aとbは等しくありません。」と返ってきています。

カマキリ

こんな調子でひとつひとつ比較演算子を確認していけばよいです。

「a > b」aがbより大きければTrue。そうでなければFalse。

実際にコードを書いてみましょう。

【結果】

aはbよりも値が大きいため、if文の条件式を満たし、print文の「aはbより大きいです。」が出力されています。

「~より大きい」というのは、その値を含まないため、例えばaとbが同じ値である場合は条件式を満たさないことに注意してください。

↑このようなコードはif文の条件式を満たさないため、printb文は実行されません。

※「a < b」の場合も処理も試してみてください<(_ _)>

「a >= b」:aがb以上(bの値を含む)であればTrue。そうでなければFalse。

先ほどの「>」「<」とは違って、「>=」や「<=」はその値を含む場合も条件を満たすことになります。

実際にコードを書いてみましょう。

【結果】

「a = 50」は「b = 10」以上であるため、if文の条件式を満たしてprint文の「aはb以上です。」が出力されています。

※「>」や「<」と違うところは、「aとbが等しい場合」もif文の条件を満たします。

【結果】

「>」や「<」では、if文の条件が満たされなかったのですが、今回は「a = b」の場合も条件式を満たしているためprint文の「aはb以上です。」が出力されています。

※「a <= b」の場合も処理も試してみてください<(_ _)>

「a is b」:aとbが同じオブジェクトであればTrue。そうでなければFalse。

このオブジェクトが同じであるかどうかというのは少し難しい話ですが、実際にコードを書いてみれば理解が深まります。

同じオブジェクトかどうかは、アドレスを一緒に出力してみることで確認することができます。

【結果】

変数に同じ値を入れると同じアドレスにデータが格納されているということになるようです。
なので、同じオブジェクトと認識されて、if文の条件式が満たされて「aとbは同じオブジェクトです。」が出力されています。

では、違う値を変数に設定するとどうなるのか見てみます。

【結果】

aとbに違う値を代入すると、違うアドレスになっているのがわかります。
なんで、if文の条件を満たさないのでprint文が実行されていないという結果になりました。

これは、どういうことなのか絵で表現してみました。

同じ値を変数に代入すると同じアドレスを参照し、違う値を変数に代入すると違うアドレスを参照しているということですね。

カマキリ

なるほど、Pythonはそういう仕様なのか(‘ω’)

では、リストの場合はどうなのか見てみます。

「関連記事」はこちら

aとbで同じリストを別々で定義する。

↑こちらはどうなるでしょう?
明らかに違うデータを作成しているので、aとbのオブジェクトは異なりますよね。

【結果】

結果は、やはり別々にオブジェクトを作成しているので、アドレスが異なるためif文の条件式を満たしませんでしたね。

a=bとする。
リストの代入は基本が「参照渡し(同じアドレスのデータを参照する)」のでした。

【結果】

結果は、当然aとbは同じオブジェクトなのでアドレスも同じです。
なので、if文の条件を満たして、print文の「aとbは同じオブジェクトです。」が出力されています。

copy()メソッドを使う
copy()メソッドを使うと、異なるオブジェクトを作成して値を同じにするというものでした。

【結果】

結果は、別々にオブジェクトを作成しているので、アドレスが異なるためif文の条件式を満たしませんでした。

以上のように、違いを認識しておかないと思いもよらないところで参照先(アドレス内)の値が変わってしまい、変数の値を変えた覚えがないのに値が変わってしまっているということがあり、長いコードを書いたときに気づきにくいです(知らないと気づけない・・・)。

※「is not」も各自コードを書いて実行し、結果を確認してみてください。

カマキリ

違いがわかるように丁寧に解説しました(‘ω’)

a in b:aがbの要素であればTrue。そうでなければFalse。

「aがbの要素であれば」とは少々わかりにくいですが、以下のようなコード書いて実行してみます。

【結果】

「b = [‘kamakiri’, 32]」というリストを作り、bの中に’kamakiri’という要素があれば、if文のなかのpritnt文「’bに”kamakiri”という要素があります。’」が出力されているということです。

同様に以下のコードも実行してみましょう。

【結果】

bに「32」という要素が存在するのでif文の条件式の中の処理が行われているのがわかります。

先ほどの「if a is b:」の条件とは違うことを理解しておかないといけないですね。
aとbのオブジェクトを同じにしても、「for ~ in ~:」の条件式を満たすわけではないです。

このようにaとbのオブジェクトを同じにしても、以下の結果となります。

【結果】

aとbのアドレスは同じでも、if文の中の処理が行われていないですよね。

※「not in」も各自コードを書いて実行し、結果を確認してみてください。

カマキリ

比較演算子は色々ありますが、よく使うのですべて覚えておく方が良いです。

比較演算子の種類は多いですが、わからなくなったらその都度正確な書き方を調べれば良いので、ここでは「こんなのがあるのか~」ってことを感じておけばよいですね。

if~elseの書き方

Pythonでのif文の条件分岐についてもう少しやっていきます。

if文の例1

以下のような条件分岐を考えます。

Pythonでの条件分岐の基本的な書き方は以下です。

再度復習になりますが、ここで注意する点は、

  • if 条件の後に「:」を忘れないこと
  • if文の中は「(Tab)スペース」がいること
    ※これはPythonでのif文の中であることを明確にするためのPythonでの記述の決まりです(これをインデントと言います)

実際にコードを書いてみましょう。

【結果】

「name=”カマキリ”」と変数を定義しているので、ひとつめのif文の中のprint文の「カマキリです」という出力がされています。

if文の例2

もっと分岐を増やすことも可能です。

 

実際にコードを書いてみましょう。

【結果】

「x = 100」と定義しているので、if文のどの条件式にも満たさないので、最後に記述したelseの中の処理が行われています。

if文の例3

以下のように「if文の中にif文」を書くこともできます。

【結果】

どの条件式を満たしたからを絵で描くと以下のようになります。

カマキリ

基本的な書き方がわかってきたこどでしょう

「a and b (aかつb)」と「a or b (aまたはb)」の書き方

条件をひとつではなく、以下のように2つ以上にすることも可能です。

書き方の例内容
a == 10 and b == 10aとbがともに10(a=10かつb=10)であればTrue。
そうでなければFalse
a ==10 or b ==10aとbのどちらかが10(a=10またはb=10)であればTrue。
そうでなければFalse

 

a == 10 and b == 10:aとbがともに10(a=10かつb=10)であればTrue。そうでなければFalse

実際にコードを書いてみましょう。

【結果】

「a = 10 かつ b = 20 」の条件式が満たされたので、ひとつ目のif文の中の処理が行われています。

ちなみに3つ以上で条件式を作ることもできます。

【結果】

このように、「and」はすべての条件が満たされたときに、ifの中の処理が行われるというものです。

a == 10 or b == 10:aとbがともに10(a=10またはb=10)であればTrue。そうでなければFalse

次に、「or(または)」についてです。

【結果】

「a=10」なので(b=10ではいが)、2つの条件のうちのひとつがひとつ目のif文の条件を満たしたので、print文の「aとbのどちらかが10です。」という出力がされています。

このように、「or」はどちらか片方の条件が満たされたときに、ifの中の処理が行われるというものです。

まとめ

この記事では以下のの内容を学びました。

この記事で学ぶこと

  1. if文の書き方
  2. 比較演算子の理解
  3. 複数パターンの条件分岐:if~else
  4. 「and条件」と「or条件」

if文の基本的な使い方で、どれもよく使う記述方法なので絶対に覚えておきましょう(^^)/

Pythonの記述についてもっと学びたいという方には以下の参考書をお勧めします。
初心者でも挫折することなく学ぶことができます。

確かな力が身につくPython「超」入門 (確かな力が身につく「超」入門シリーズ)

確かな力が身につくPython「超」入門 (確かな力が身につく「超」入門シリーズ)

鎌田 正浩
2,728円(10/29 19:30時点)
発売日: 2016/03/16
Amazonの情報を掲載しています
みんなのPython 第4版

みんなのPython 第4版

柴田 淳
2,673円(10/29 10:00時点)
発売日: 2016/12/21
Amazonの情報を掲載しています

Pythonの辞書的な参考書としては以下の参考書をお勧めします。

現場ですぐに使える! Pythonプログラミング逆引き大全 357の極意

現場ですぐに使える! Pythonプログラミング逆引き大全 357の極意

俊哉, 金城
3,190円(10/29 10:24時点)
発売日: 2020/05/16
Amazonの情報を掲載しています

【プロフィール】

カマキリ
(^^)

大学の専攻は物性理論で、Fortranを使って数値計算をしていました。
CAEを用いた流体解析は興味がありOpenFOAMを使って勉強しています。

プロフィール記事はこちら

 

大学学部レベルの物理の解説をします 大学初学者で物理にお困りの方にわかりやすく解説します。

このブログでは主に大学以上の物理を勉強して記事にわかりやすくまとめていきます。

  • ・解析力学
  • ・流体力学
  • ・熱力学
  • ・量子統計
  • ・CAE解析(流体解析)
  • note
    noteで内容は主に「プログラミング言語」の勉強の進捗を日々書いています。また、「現在勉強中の内容」「日々思ったこと」も日記代わりに書き記しています。
  • youtube
    youtubeではオープンソースの流体解析、構造解析、1DCAEの操作方法などを動画にしています。
    (音声はありません_(._.)_)
  • Qiita
    Qiitaではプログラミング言語の基本的な内容をまとめています。