RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

Python if文でできること【まとめ】

アイキャッチ画像

はじめに

皆様こんにちは。インフラ開発課でインフラエンジニアとして勤務しておりますryskwです。
わたしはプログラムなどまったくの未経験でラクスに採用していただきましたが、最近になってエンジニアであればやはり何かプログラミング的な学習をしたいと思っているところです。
せっかくなので課内で扱う方も多いPythonをやってみたいと思い色々と書籍を読み始めたりしているので、今回はPythonに限らずスクリプトを組むうえでも使用する機会の多いであろうif文について、自己学習もかねてまとめていきたいと思います。
そのため本記事はPythonを最近触り始めたばかりの人が読んでいただくことを想定しております。

目次

Pythonとは

Pythonをざっくりと語るのであれば、プログラミング言語の中でも少ないソースコードでわかりやすいコードが書けることから、プログラミング教育や初心者向けのプログラミング言語として多く利用されていることなどが特徴としてあげられることが多いと思います。作成したコードをコンパイルする作業も不要であり、エラーがあったとしても確認が容易であることもプログラミング初心者にとってはとっつきやすい点の一つになるかと思います。

個人的にPythonでできることの中でも特に興味があることとしては、機械学習ディープラーニングなどの分野で分析ツールの作成においてPythonが利用されていることにあります。Pythonには開発者向けに便利なライブラリがたくさん公開されているので、慣れてくるとやりたいことがなんでもできるようになるんじゃないか、というプログラミングに対してふわっとした期待感が持てます。

Python if文の書式

それではまずはPythonでのif文について簡単に説明します。
Pythonに限りませんが、if文は条件によってその後の処理を行うかどうかプログラム内で分岐処理を行いたいときに使用する構文です。
わかりやすく表現するのであれば、「もし○○のときは××する。」といった具合ですね。
if文では、条件式(条件として実行した処理)の結果がTrueかFalseで判断し、Trueの場合に続く処理を実行します。

たとえば、Pythonのコードの中でnumberという変数を使用し、条件としてその中に代入された数字が3よりも大きい場合に「3より大きいです」と表示させるには、以下のように記述します。

$ cat test.py
number = 5

if number > 3:
    print('3より大きいです')

$ python3 test.py
3より大きいです
$

Python if文の書式において、printの処理の箇所でインデントを下げているのは、
「ここはPythonのコードの中でif文で条件が分かれた後の処理ですよ」ということが見た目にわかるだけでなく、
Pythonがコードと処理を正しく認識するためにも必要です。 インデントがおかしいとPythonプログラム実行時にエラーが表示されてしまいます。
試しにif文の条件分岐後のprint処理をインデントを下げずに記述してPythonを実行してみると、以下のようなエラーが表示されました。

$ cat test_error.py
number = 5

if number > 3:
print('3より大きいです')

$ python3 test_error.py
  File "test_error.py", line 4
    print('3より大きいです')
    ^
IndentationError: expected an indented block
$

ちなみにPythonにおいては、if文などでインデントを下げる場合は一般的に半角スペース4つ分とするようです。

もしif文の条件との比較の結果、Falseだった(条件に当てはまらなかった)場合には何も処理が行われません。
先ほどよりnumberに代入する値を小さくしてみましょう。

$ cat test_false.py
number = 1

if number > 3:
    print('3より大きいです')

$ python3 test_false.py
$

この場合では、numberという変数に入っている1が、if文の条件で比較対象となった3より小さかったためにPythonを実行しても結果に何も表示されませんでした。

Python if文で条件式で使用する演算子と注意点

  • 演算子
    if文での条件式では、数字や文字列の一致、不一致などによって判断させます。
    その際、条件比較するために使用する代表的な演算子は以下のようなものがあります。
記号 内容
== 左辺と右辺が等しければTrueを返す 1 == 1
!= 左辺と右辺が等しくなければTrueを返す 1 != 2
< 左辺よりも右辺のほうが大きければTrueを返す 1 < 2
> 左辺が右辺よりも大きければTrueを返す 2 > 1
<= 左辺が右辺以下ならばTrueを返す 1 <= 2
>= 左辺が右辺以上ならばTrueを返す 2 >= 1

また、他にも以下のような比較演算子Python if文では使用できます。参考にしてみてください。

記号 内容
is 2つのオブジェクトが同一であればTrueを返す 1 is 1
is not 2つのオブジェクトが同一でなければTrueを返す 1 is not '1'
  • 注意点
    Python if文で比較を行う際には、比較するオブジェクトが数字か、文字列なのかなど、同じオブジェクト同士での比較になっているか注意が必要です。
    Pythonでは整数のオブジェクトにはint型、文字列にはstr型、となっています。
    if文で比較する際にはこの型が一致していなければPythonは正しくプログラムを動かしてくれません。
    もしif文で比較したい型が条件の前後で異なっていた場合、Pythonはエラーを表示します。
    試しに、変数numberに文字列としての5を代入し、if文では整数の3と比較させてみましょう。
$ cat test_str_err.py
number = '5'

if number > 3:
    print('3より大きいです')

$ python3 test_str_err.py
Traceback (most recent call last):
  File "test_str_err.py", line 3, in <module>
    if number > 3:
TypeError: '>' not supported between instances of 'str' and 'int'
$

このような場合は、if文の条件式で比較したい対象を前述したint型、str型、といった型で明示的に指定してあげることもできます。

$ cat test_int.py
number = '5'

if int(number) > 3:
    print('3より大きいです')

$ python3 test_int.py
3より大きいです
$

Python if文で条件文を追加したいとき

  • Python if文の比較結果がFalseだったときにも処理を行いたいとき
    if文では比較の結果がTrueだったときに処理を行う構文になっておりますが、もし比較の結果がFalseだったときにも何か処理を実行したい場合があるかもしれません。
    そんなときはif文にelseの処理を追加することで対応が可能です。
$ cat test_if_else.py
number = 5

if number > 4:
    print('4より大きいです')
else:
    print('4以下です')

$ python3 test_if_else.py
4より大きいです
$

上記の場合では、変数numberが5であり条件の4よりも大きいため、一つ目のブロックでif文の結果でTrueが返ります。
よってif文の実行結果として出力されるのは「4より大きいです」となりました。

ところが、変数numberが3であった場合はどうでしょうか。 その場合、一つ目のif文で比較された結果、Falseが返ります。

$ cat test_if_else.py
number = 3

if number > 4:
    print('4より大きいです')
else:
    print('4以下です')

$ python3 test_if_else.py
4以下です
$

Falseが返ると、「そうでない場合は」という条件であるelseでの処理になるため、Pythonの処理を実行すると結果は「4以下です」となりました。

  • Python if文で条件を複数設定したいとき
    また、Pythonのif文で条件を分岐したあと、さらに条件を追加して処理を分岐したい、と思うことがあるかもしれません。 「もし○○のときは××する。もし★★のときは■■する。そうでないときは▲▲する。」といった具合に、条件を増やして分岐先の処理を増やしたいときには、「if elif else」構文で対応が可能です。 以下はif文の条件を3つにした場合の例です。
$ cat test_if_elif_else.py
number = 4

if number > 10:
    print('10より大きいです')
elif number > 5:
    print('5より大きいです')
else:
    print('4以下です')

$ python3 test_if_elif_else.py
4以下です
$

また、if文の中でさらにif文によって条件分岐を行いたいときもあるかと思います。
そういった場合では、インデントをさらに一つ下げることでif文の処理を継続することが可能です。
(if文のネスト(入れ子)構造と呼びます。)

$ cat test_if_if.py
number = 10

if number > 4:
    if number <= 8:
        print('8以上です')
    else:
        print('4より大きく8未満です')
else:
    print('4未満です')

$ python3 test_if_if.py
4より大きく8未満です
$

また、入れ子構造になっているif文の比較を「and」や「or」を用いて書くこともできます。
日本語で言うところの「○○かつ■■」や「××または△△」といった条件のことを指す、といえば少しわかりやすいかもしれません。
一つ前のPython実行例の中のif文をandで書きなおすと以下のようになります。

$ cat test_and.py
number = 10

if number > 4 and number <= 8:
    print('4より大きく8以下です')
elif number > 4 and number > 9:
    print('9より大きいです')
else:
    print('4未満です')

$ python3 test_and.py
9より大きいです
$

おまけ

最後に、Pythonのfor文とif文とを組み合わせることで、「同じ処理を繰り返して、特定の回数以上処理を繰り返したらそこで処理を終了する」というコードを書いてみたいと思います。
for文ではリスト内のすべての要素に対して繰り返し処理を実行したい場合などに便利です。
今回は、1から10の数字をfor文によって次々と変数numberに代入していき、「もし繰り返しが5回目になったら処理を中断する」処理にしてみます。

$ cat test_if_for.py
for number in range(1,10):
    print('{}回目の処理です'.format(number))
    if number >= 5:
        print('5回目の処理になったので処理を中断します')
        break

$ python3 test_if_for.py
1回目の処理です
2回目の処理です
3回目の処理です
4回目の処理です
5回目の処理です
5回目の処理になったので処理を中断します
$

上記では、Pythonのfor文を利用して処理の回数を表示するのを繰り返しており、条件として繰り返しの回数(変数number)が5以上となったときに、if文の条件分岐によって処理が終了するようにコードが記載されています。
そのため、「5回目の処理です」と出力した後のif文の分岐で条件に一致したため「5回目なので処理を中断します」と出力され、Pythonの実行が完了しました。

最後に

いかがだったでしょうか。
Pythonは書式さえ覚えることができれば比較的に簡単にプログラムができるんじゃないかと思います。
Python if文をいくつか組み合わせるだけでも、やりたいことの実現も少し見えてくるのではないでしょうか。
私もまだ勉強中の身ではありますが、慣れてきたらサーバのログ分析ツールなどをPythonで作ってみたいと考えています。
ご覧いただきありがとうございました。


  • エンジニア中途採用サイト
    ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
    ご興味ありましたら是非ご確認をお願いします。
    20210916153018
    https://career-recruit.rakus.co.jp/career_engineer/

  • カジュアル面談お申込みフォーム
    どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
    以下フォームよりお申込みください。
    forms.gle

  • イベント情報
    会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
    rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.