Pythonの3項演算子とは?if文を1行で書く方法

Pythonの3項演算子(条件式)を使ってif文を1行で書く方法を詳しく解説。基本的な使い方から応用例まで実践的なコード例で学べます。

Learning Next 運営
19 分で読めます

if文をもっと短く書けたらいいのにと思いませんか?

みなさん、Pythonでプログラムを書いている時に「if文が長くて見づらい」と感じたことはありませんか?

「条件によって値を変えたいだけなのに4行も書くの?」 「もっとスッキリした書き方はないの?」 「他の人のコードで見たことがある短い書き方を知りたい」

このような悩みを持つ方はとても多いです。

実は、3項演算子を使えばif文を1行で書けるんです。

この記事では、Python初心者の方向けに3項演算子の基本的な使い方から実践的な活用方法まで詳しく解説します。 コードをスッキリ書けるようになって、プログラミングをもっと楽しくしましょう!

3項演算子って何?

3項演算子は、条件によって値を変える式を1行で書ける機能です。

簡単に言うと、短いif文のようなものなんです。

基本的な書き方

3項演算子の基本的な構文はこれです。

1 if 条件 else2

条件がTrueなら値1、Falseなら値2を返します。

とてもシンプルですよね。

通常のif文との比較

どれくらい短くなるか見てみましょう。

# 通常のif文(4行)
age = 20
if age >= 18:
status = "大人"
else:
status = "未成年"
print(status) # 大人
# 3項演算子(1行)
age = 20
status = "大人" if age >= 18 else "未成年"
print(status) # 大人

4行が1行になりました!

実行結果:

大人 大人

同じ結果でコードがスッキリしました。

どんな時に使う?

3項演算子が便利な場面があります。

  • 簡単な条件で値を決める: 成人か未成年か、など
  • デフォルト値を設定: 入力がなければ初期値を使う
  • 短いメッセージの切り替え: エラーか正常か、など

シンプルな条件の時に威力を発揮します。

基本的な使い方

実際に3項演算子を使ったパターンを見てみましょう。

よく使われる場面から学んでいきます。

数値の比較

数値を比較して値を決める例です。

# 合格判定
score = 85
result = "合格" if score >= 80 else "不合格"
print(result) # 合格
# 最大値を取得
a = 10
b = 15
max_value = a if a > b else b
print(max_value) # 15
# 絶対値の計算
number = -5
absolute = number if number >= 0 else -number
print(absolute) # 5

数値の判定や計算でとても便利です。

実行結果:

合格 15 5

短いコードで目的を達成できました。

文字列の処理

文字列を扱う時の活用例です。

# 文字列の長さチェック
name = "田中"
message = "名前が短すぎます" if len(name) < 3 else "名前が適切です"
print(message) # 名前が短すぎます
# 空文字列のチェック
user_input = ""
display_text = "未入力" if user_input == "" else user_input
print(display_text) # 未入力
# メールアドレスの表示
email = "user@example.com"
masked_email = "非表示" if email == "" else email
print(masked_email) # user@example.com

文字列の検証や表示制御に活用できます。

実行結果:

名前が短すぎます 未入力 user@example.com

条件に応じて適切なメッセージが表示されます。

リストの処理

リストを扱う時の便利な使い方です。

# リストの要素数チェック
items = [1, 2, 3]
status = "空のリスト" if len(items) == 0 else "データあり"
print(status) # データあり
# リストの最初の要素を安全に取得
numbers = [10, 20, 30]
first_item = numbers[0] if numbers else None
print(first_item) # 10
# 空リストの場合
empty_list = []
first_item = empty_list[0] if empty_list else "データなし"
print(first_item) # データなし

リストが空かどうかの確認でよく使います。

実行結果:

データあり 10 データなし

エラーを避けて安全に処理できます。

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

3項演算子は複数の条件も扱えます。

より柔軟な判定が可能です。

and演算子を使用

複数の条件を同時に満たす場合の例です。

# 温度と湿度で快適度を判定
temperature = 25
humidity = 60
comfort = "快適" if temperature >= 20 and humidity <= 70 else "不快"
print(comfort) # 快適
# ユーザー権限の確認
is_admin = True
is_active = True
access = "許可" if is_admin and is_active else "拒否"
print(access) # 許可

すべての条件を満たす場合の判定ができます。

実行結果:

快適 許可

複数条件でも読みやすく書けます。

or演算子を使用

いずれかの条件を満たす場合の例です。

# 天気による活動場所の決定
weather = "雨"
activity = "室内" if weather == "雨" or weather == "雪" else "屋外"
print(activity) # 室内
# エラー状態のチェック
error_code = 404
status = "エラー" if error_code == 404 or error_code == 500 else "正常"
print(status) # エラー

どちらかの条件に当てはまる場合の判定です。

実行結果:

室内 エラー

柔軟な条件判定ができます。

3項演算子の入れ子

より複雑な条件も表現できます。

# 成績のグレード判定
score = 95
grade = "A" if score >= 90 else "B" if score >= 80 else "C"
print(grade) # A
# より読みやすい書き方
score = 75
grade = (
"A" if score >= 90 else
"B" if score >= 80 else
"C" if score >= 70 else
"D"
)
print(grade) # C

複数段階の条件を1つの式で表現できます。

実行結果:

A C

複雑な判定も簡潔に書けました。

関数での活用

関数と組み合わせることで、さらに便利になります。

実用的な例を見てみましょう。

関数の引数での使用

関数の中で3項演算子を使う例です。

def greet(name, formal=False):
"""挨拶メッセージを作成"""
greeting = "こんにちは" if formal else "やあ"
return f"{greeting}{name}さん"
# 使用例
print(greet("田中", True)) # こんにちは、田中さん
print(greet("佐藤", False)) # やあ、佐藤さん
print(greet("鈴木")) # やあ、鈴木さん

フォーマルかカジュアルかを切り替えられます。

実行結果:

こんにちは、田中さん やあ、佐藤さん やあ、鈴木さん

柔軟な挨拶システムができました。

デフォルト値の設定

引数が指定されない場合の初期値を設定する例です。

def calculate_tax(price, rate=None):
"""税金を計算(税率が未指定なら10%)"""
tax_rate = rate if rate is not None else 0.1
return price * tax_rate
# 使用例
print(calculate_tax(1000)) # 100.0 (デフォルト10%)
print(calculate_tax(1000, 0.08)) # 80.0 (指定税率8%)
print(calculate_tax(1000, 0.05)) # 50.0 (指定税率5%)

引数の有無に応じて処理を変更できます。

実行結果:

100.0 80.0 50.0

柔軟な関数設計が可能です。

戻り値の決定

条件によって戻り値を変える例です。

def get_discount_rate(is_member, age):
"""会員割引率を決定"""
if is_member:
return 0.2 if age >= 65 else 0.1
else:
return 0.05 if age >= 65 else 0.0
# 使用例
print(get_discount_rate(True, 70)) # 0.2 (会員&シニア)
print(get_discount_rate(True, 30)) # 0.1 (会員のみ)
print(get_discount_rate(False, 70)) # 0.05 (シニアのみ)
print(get_discount_rate(False, 30)) # 0.0 (割引なし)

複数条件での戻り値制御ができます。

実行結果:

0.2 0.1 0.05 0.0

条件に応じた適切な値を返せます。

実践的な活用例

実際のプログラムでよく使われる場面を見てみましょう。

日常的なプログラミングで役立つパターンです。

ユーザー入力の処理

ユーザーからの入力を安全に処理する例です。

def process_user_age():
"""ユーザーの年齢入力を処理"""
user_input = input("年齢を入力してください: ")
# 数字かどうかをチェックして安全に変換
age = int(user_input) if user_input.isdigit() else 0
# 年齢に応じたメッセージ
permission = "許可" if age >= 18 else "不許可"
message = f"年齢: {age}, アクセス: {permission}"
return message
# テスト例(実際の入力の代わり)
def test_age_processing():
test_inputs = ["25", "15", "abc", ""]
for test_input in test_inputs:
# 実際の処理をシミュレート
age = int(test_input) if test_input.isdigit() else 0
permission = "許可" if age >= 18 else "不許可"
print(f"入力: '{test_input}' → 年齢: {age}, アクセス: {permission}")
test_age_processing()

不正な入力も安全に処理できます。

実行結果:

入力: '25' → 年齢: 25, アクセス: 許可 入力: '15' → 年齢: 15, アクセス: 不許可 入力: 'abc' → 年齢: 0, アクセス: 不許可 入力: '' → 年齢: 0, アクセス: 不許可

エラーを防いで安全に動作します。

設定値の管理

開発環境と本番環境での設定切り替え例です。

# 開発モードの設定
DEBUG = True
ENVIRONMENT = "development"
# 設定値を条件で切り替え
LOG_LEVEL = "DEBUG" if DEBUG else "INFO"
MAX_CONNECTIONS = 10 if DEBUG else 1000
DATABASE_URL = "localhost" if ENVIRONMENT == "development" else "production-server"
# APIのタイムアウト設定
API_TIMEOUT = 30 if DEBUG else 5
print(f"ログレベル: {LOG_LEVEL}")
print(f"最大接続数: {MAX_CONNECTIONS}")
print(f"データベース: {DATABASE_URL}")
print(f"APIタイムアウト: {API_TIMEOUT}秒")

環境に応じた設定の自動切り替えができます。

実行結果:

ログレベル: DEBUG 最大接続数: 10 データベース: localhost APIタイムアウト: 30秒

開発しやすい環境設定が作れます。

データの変換

リスト内包表記と組み合わせた処理例です。

# 成績データの変換
scores = [85, 92, 78, 96, 73, 65, 88]
# 点数をグレードに変換
grades = [
"A" if score >= 90 else
"B" if score >= 80 else
"C" if score >= 70 else
"D"
for score in scores
]
print("点数とグレード:")
for score, grade in zip(scores, grades):
print(f" {score}点 → {grade}")
# 合格者数をカウント
passed_count = sum(1 for score in scores if score >= 70)
total_count = len(scores)
pass_rate = passed_count / total_count * 100
print(f"
合格率: {pass_rate:.1f}% ({passed_count}/{total_count})")

大量データの一括変換が効率的にできます。

実行結果:

点数とグレード: 85点 → B 92点 → A 78点 → C 96点 → A 73点 → C 65点 → D 88点 → B 合格率: 71.4% (5/7)

データ分析で威力を発揮します。

注意点とベストプラクティス

3項演算子を正しく使うためのポイントです。

読みやすいコードを書くために覚えておきましょう。

可読性を優先する

複雑すぎる条件は避けることが大切です。

# 読みにくい例(避けるべき)
result = "A" if x > 90 else "B" if x > 80 else "C" if x > 70 else "D" if x > 60 else "F"
# 読みやすい例(推奨)
if x > 90:
result = "A"
elif x > 80:
result = "B"
elif x > 70:
result = "C"
elif x > 60:
result = "D"
else:
result = "F"

複雑な場合は通常のif文を使いましょう。

適切な使用場面

3項演算子が適している場面そうでない場面があります。

# 適切な使用例
status = "アクティブ" if user.is_active else "非アクティブ"
price = original_price * 0.8 if is_member else original_price
# 複雑すぎる例(避けるべき)
message = "エラー" if not data or len(data) == 0 or data[0] is None else "正常"
# より良い書き方
if not data or len(data) == 0 or data[0] is None:
message = "エラー"
else:
message = "正常"

シンプルな条件の時だけ3項演算子を使いましょう。

デバッグしやすいコード

エラーが起きた時に原因を特定しやすい書き方です。

# デバッグしにくい例
result = process(data) if validate(data) and check_permission(user) else None
# デバッグしやすい例
if validate(data) and check_permission(user):
result = process(data)
else:
result = None
print("データまたは権限エラー")

重要な処理では通常のif文を使うことをおすすめします。

まとめ: 3項演算子で効率的なプログラミング

Python 3項演算子の基本から実践的な活用方法まで詳しく解説しました。

3項演算子をマスターすることで、より読みやすく効率的なコードが書けるようになります。

覚えておきたいポイント

これだけは覚えておきましょう。

  • 基本構文: 値1 if 条件 else 値2
  • 適用場面: シンプルな条件での値の切り替え
  • 注意点: 複雑な条件では通常のif文を使用
  • 活用場面: デフォルト値、設定管理、データ変換

よく使われる場面

日常的なプログラミングでよく使われる場面です。

  • ユーザー入力の検証: 不正値のデフォルト処理
  • 設定値の管理: 環境による値の切り替え
  • データ変換: リスト内包表記との組み合わせ
  • 安全な処理: Noneチェックやエラー回避

上達のコツ

3項演算子を上手に使うためのポイントです。

  • まずは簡単な例から: 単純な条件で練習
  • 可読性を最優先: 読みやすさを常に意識
  • 適切な場面の判断: 複雑な時は普通のif文
  • 実際のコードで練習: 自分のプログラムで活用

3項演算子は、適切に使えばコードを美しくする強力な機能です。

まずは簡単な条件から始めて、徐々に複雑な処理にも挑戦してみてください!

関連記事