もっといろいろな条件式を書いてみよう2

もっといろいろな条件式を書いてみよう2

Pythonでは、if文をはじめとした制御構文によって、さまざまな条件式を用いて処理を分岐することができます。初心者のうちは==(等しいかどうか)や</>(大小比較)のみ使うことが多いかもしれません。しかし実際には、文字列の長さ比較や特定の文字列を含むかどうか、または型や要素の存在チェックなど、多彩な条件式が存在します。本記事では、単純な比較演算子以外の条件式をいくつか取り上げ、サンプルコードを交えて解説していきます。Pythonを学び始めたばかりという方にもわかりやすいように解説していきますので、ぜひ参考にしてみてください。

文字列の長さで比較を行う

文字列自体を==!=<などで比較するだけでなく、文字列の長さ(len関数)を用いて条件分岐する方法があります。たとえば、パスワードが一定文字数以上かどうかを確認するケースや、ユーザーが入力したテキストが空かどうかを調べるケースなどに応用できます。


password = input("パスワードを入力してください: ")

if len(password) < 8:
    print("パスワードが短すぎます。8文字以上にしてください。")
elif len(password) > 20:
    print("パスワードが長すぎます。20文字以内にしてください。")
else:
    print("パスワードの長さは適切です。")

このように、文字列の長さを条件式に組み込むことで、比較的シンプルに仕様を満たすかどうかを判断できるようになります。

文字列を含むかどうか(部分文字列の検索)

文字列の一部に特定の文字列が含まれるかどうかをチェックする場合は、以下のような方法を使います。

  • in演算子:文字列が部分文字列として含まれているかを判定
  • not in:文字列が含まれていないかどうかを判定

例えば、ユーザー名やメールアドレスのバリデーション時に「@」が含まれるかどうかチェックする場合などに使えます。


email = input("メールアドレスを入力してください: ")

if "@" not in email:
    print("メールアドレスに@が含まれていません。")
else:
    print("メールアドレスの形式としては一応OKです。")

また、str.startswith()str.endswith()を使えば、文字列の先頭や末尾が特定の文字列であるかどうかも簡単に判定できます。


filename = "example.py"

if filename.endswith(".py"):
    print("これはPythonファイルです。")
else:
    print("Pythonファイルではありません。")

リストや辞書に要素が含まれているかどうか

文字列以外でも、リスト・タプル・辞書などで「要素が含まれているかどうか」をチェックするケースは頻繁に登場します。リストやタプルではinnot inを使い、辞書の場合はデフォルトでは「キー」の存在を調べます。


user_roles = ["admin", "editor", "viewer"]
current_role = "editor"

if current_role in user_roles:
    print("権限ロールが存在します。")
else:
    print("指定された権限ロールは存在しません。")

user_info = {"name": "Alice", "age": 24}
if "age" in user_info:
    print("年齢情報が登録されています。")
else:
    print("年齢情報が登録されていません。")

このように、データ構造に対してin演算子を使うだけで、簡単に要素の存在判定を行うことができます。辞書でvalueの存在を調べたい場合は、value in user_info.values()のように.values()メソッドを使うやり方などもあるので、使いどころに応じて使い分けましょう。

型やクラスのチェック:isinstance()

条件式の中には、変数の型やインスタンスが特定のクラスかどうかを判定したい場面もあります。そんなときにはisinstance()を利用するのが便利です。


value = 42

if isinstance(value, int):
    print("整数型です。")
elif isinstance(value, float):
    print("浮動小数点型です。")
else:
    print("その他の型です。")

Pythonでは動的型付けが特徴ですが、状況によっては値の型をチェックすることでバグを防いだり、意図した通りの処理かどうかを確認したりすることができます。特に関数の引数の型を検証したい場合や、外部から受け取るデータ(APIレスポンスなど)が想定した型であるかを確認する場合に役立ちます。

複数の条件式を組み合わせる:andor

複数の条件を同時に満たすかどうか、あるいはいずれかを満たすかどうかを判定したいケースはよくあります。その場合にはandorを使って条件式を組み合わせます。たとえば、ある範囲内に数値が収まっているかチェックする場合などが典型例です。


age = 20

if age >= 18 and age < 65:
    print("この人は成人であり、かつ65歳未満です。")
elif age >= 65:
    print("この人は65歳以上です。")
else:
    print("この人は未成年です。")

このように複数条件を繋ぐことで、分岐の幅が一気に広がります。ただし条件式が長くなると可読性が低下しやすいので、こまめにコードを整理することも大切です。

条件式を工夫してコードをシンプルに保つ

条件式は直感的に書ける一方で、複雑になりがちな部分でもあります。たとえば、ネストが深いif文を避けるために、elifを使って分岐を整理したり、条件式を先に変数へ格納して読みやすくしたりするなど、工夫をこらして可読性を高めるのが大切です。以下のような例を考えてみましょう。


# 少し冗長な例
user_input = input("数値を入力してください: ")
num = int(user_input)

if num >= 0:
    if num % 2 == 0:
        print("非負の偶数です")
    else:
        print("非負の奇数です")
else:
    if num % 2 == 0:
        print("負の偶数です")
    else:
        print("負の奇数です")

# 上記を若干リファクタリングしてみる
is_non_negative = (num >= 0)
is_even = (num % 2 == 0)

if is_non_negative and is_even:
    print("非負の偶数です")
elif is_non_negative and not is_even:
    print("非負の奇数です")
elif not is_non_negative and is_even:
    print("負の偶数です")
else:
    print("負の奇数です")

同じ分岐処理でも、条件をまとめて変数化することで読み手に意図を伝えやすくする工夫ができます。こうした方法を少しずつ取り入れていくと、大規模なコードでも可読性を損なわずに運用しやすくなるでしょう。

まとめ

本記事では、文字列の長さ比較や文字列の部分一致、リストや辞書の要素チェック、型チェック、and/orを用いた複数条件の組み合わせなど、単純な比較演算子以外の条件式を紹介しました。実際の開発では、入力のバリデーション・ファイル名のチェック・ユーザー権限の確認など、さまざまな場面でこれらの条件式が活躍します。

「どんな条件を判定したいのか?」という処理の要件を改めて考えることで、Pythonの条件分岐はさらに活用しやすくなります。これを機に、ぜひいろいろな演算子や関数、メソッドを試してみてください。条件式をより柔軟に扱えるようになると、コードの幅が一気に広がります。

これからさらに複雑なロジックや実践的な場面に触れていく際にも、ここで紹介した条件式のパターンを参考にしながら、どのように分岐処理を組み立てるか工夫してみましょう。うまく書けば書くほど、バグが入りにくく、可読性の高いコードを実現できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です