5
1

Python if文まとめ

Last updated at Posted at 2024-08-25

0 はじめに

こんにちは。橘諸兄です。
久し振りの記事の投稿です。
私のfor文のまとめの記事を多くの方にご閲覧・高評価頂いております。ありがとうございます。

この記事ではif文についてPythonの初学者さんにも分かるように書きます。

1 if文の使い方

if文は分岐処理に用いるもので、殆ど全てのプログラミング言語に実装されているでしょう。
if文に分類されるものはifelifelseがあります。

1-1 if

if (条件P):
  Pの時の行う動作

ifはこれだけです。

例えば

n=3
if n==3:
  print("Yes")

だと

Yes

と出力されます。

1-2 else

elseifに対して次のように用います。

if (条件P):
  (Pの時の動作)
else:
  (Pでない時の動作)

例えば

n = 2
if n == 3:
  print("Yes")
else:
  print("No")

だと

No

と出力されます。

1-3 elif

elifelse ifの略です。(C++には無いでしょう)
その名前の由来の通り、elififに対して次のように用います。

if (条件P):
  (Pの時の動作)
elif (条件Q):
  (PでなくQの時の動作)

例えば、

n = 2
if n == 3:
  print("Yes")
elif n == 2:
  print("Oh")
else:
  print("No")

であれば、一つ目の条件n == 3は通過し、二つ目の条件n == 2には引っ掛かるので、

Oh

が出力されます。

又、ifの後にelifではなくifを用いた場合、その前のif文とは切り離されて処理されます。注意しましょう。
つまり、

n = 3
if n > 2:
  print("A")
if n > 1:
  print("B")

だと、2つのifが別々に扱われるので

A
B

となります。
(2つ目をelifとした場合、Bは出力されませんね。確かめてみましょう。)

1-4 while

while文はfor文の仲間ですが、条件をとるという点でif文と似ていると思いました。一応紹介しておきます。
while

while (条件P):
  (条件Pが成立っている間ずっとこの動作を行う)

のように用います。

例えば、

n = 3
while n > 0:
  print(n)
  n = n - 1

であれば、nが0より大きい間print(n)n=n-1が実行されるので、

3
2
1

と出力されます。

(以下、発展的な内容ですので、参考までに)

又、for文と同様に途中で強制終了することもできます。

n = 3
while n > 0:
  print(n)
  n = n - 1
  break

であれば、while内の処理を1回行った時に強制的に終了されるので、出力は

3

だけです。

そして、for文と同様、breakで終了されなかったかはelseで検出することができます。

n = 3
while n > 0:
  print(n)
  n = n - 1
else:
  print("Oh")

であれば、breakによる強制終了はされていないので

3
2
1
Oh

となります。

2 条件のルール

条件には主に、比較演算子や論理演算子が使われます。

2-1 比較演算子

上に書いたn == 3n > 0などのように、2つの要素がどうかを調べるものを比較演算子と言います。
比較演算子には次のようなものがあります。

比較演算子 意味
a == b abが等しいか
a != b abが異なるか
a < b baより大きいか
a > b baより小さいか
a <= b ba以上か
a >= b ba以下か

=ではなく==であることに注意して下さい。=は値の変更です。
・比較演算子は、真ならTrue、偽ならFalseを返します。TrueFalseboolという型に所属しています。
・型が異なる場合は、==で比較してもFalseが帰ってきたり、>などの大小比較をしてもエラーが出たりします。
・(isというのもあるようですが、==の方が確実です。気になる方は参考になる記事をご覧ください。)

2-2 論理演算子

論理演算子は条件から新たな条件を作るものです。次のようなものがあります。
(P,Qは条件とします)

論理演算子 意味
not P Pでない
P and Q PQも成り立つ
P or Q PQどちらかは成り立つ

高校数学で扱うのと全く一緒ですね。

これらを複合させてもっと複雑な条件を作ることもできますが、異なる論理演算子を結合させる時は()で括って明確にするとよいでしょう。
例えば、P かつ (Q かつ R)ならP and Q and Rでいいのですが、P かつ (Q または R)を表したい時は、P and (Q or R)としましょう。

(実験してみたところ、論理演算子は左から順に実行されるように見えました。
つまり、P and Q or Rなら(P and Q) or Rとして実行されるようです。)

(2024/08/25 22:54 shiracamusさんのご指摘による訂正) 論理演算子はandが優先されます。

又、PQどちらかだけが成り立つとしたい場合、bit演算子^を使うとよいでしょう。
この場合は次のように条件を()で囲む必要があります。

n = 1
if (n == 1) ^ (n == 2):
  print("Oh")

出力は勿論

Oh

です。

3 発展的な話

3-1 条件以外にも使えます

ifの後には「条件」以外も来れます。
例えば、

if True:
  print("Oh")
if False:
  print("Wow")

とすれば、Trueのところは実行されてFalseのところは実行されず、

Oh

と出力されます。

(上に述べたような演算子もbool値を返すものでしたから、if文はbool値を引数(?)にとるものと考えられますね。)

前のコードは至って冗長でしたが、while文ではこのような記法はよく使われます。

while True:
  print("Wow")

とすると、

Wow
Wow
Wow
(以下限りなく続く)

とずっと続きます。

3-2 bool値以外でも使えます

実は、if文の後に来れるのはint型、str型、list型などいくらでもあります。

n = 10
s = "ABC"
t = ""
L = [1,2,4]
if n:
  print("a")
if s:
  print("b")
if t:
  print("c")
if L:
  print("d")

を実行すると

a
b
d

と出力されました。

恐らく、ifの後に来たものはbool型に変換されてから処理されているのでしょう。
実際、

n = 10
s = "ABC"
t = ""
L = [1,2,4]
print(bool(n))
print(bool(s))
print(bool(t))
print(bool(L))

とすると、

True
True
False
True

と出力されました。

「空」のもの(intなら0strなら空文字列、listなら空配列など)がFalseになり、そうでないものがTrueになるのだと思います。

(2024/08/25 22:54 shiracamusさんのご指摘による追加情報)
Falseになる組み込みオブジェクトは、偽であると定義されている定数(NoneFalse)、数値型におけるゼロ、空のシーケンスまたはコレクション('',(),{}など)です。

4 さいごに

最後までお読みいただきありがとうございました。
if文関連で記事を書こうと思い立って90分で仕上げましたが、意外と長くなってしまいました。
(Python版APG4bがAtCoderさんから出ているようで、この記事の需要は果たしてあるのかという話ですが)
ついでに、随分前ですがfor文についての記事も執筆致しましたので、そちらも併せてご覧頂けると幸いです。
ではまた別の記事でお会いしましょう。さようなら。

追記.shiracamus様のご指摘により、誤情報を改め曖昧な箇所を正確に修正しました。shiracamus様に感謝を申し上げます。

5
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1