読み込み中...

Pythonのif文を用いて数値の判定を行う方法と活用10選

数値判定 徹底解説 Python
この記事は約29分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

本記事のサンプルコードを活用して機能追加、目的を達成できるように作ってありますので、是非ご活用ください。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を満たす現役のプログラマチームによって監修されています。

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

●Pythonのif文と数値判定の基礎知識

条件分岐は非常に重要な概念です。

Pythonにおいて、その中心となるのがif文です。

if文を使うと、特定の条件が満たされた時にのみ、ある処理を実行することができます。

数値の判定は、このif文の代表的な使用例の一つです。

プログラムの中で数値を扱う機会は数多くあります。

例えば、ユーザーの年齢に応じて異なる対応をしたり、商品の在庫数に基づいて注文の可否を決定したりする場合などです。

こうした状況で、if文を使った数値判定が威力を発揮します。

初めてPythonに触れる方にとって、if文や数値判定の概念は少し難しく感じるかもしれません。でも心配はいりません。

順を追って丁寧に説明していきますので、ゆっくりと理解を深めていきましょう。

○if文の基本構造

if文の基本的な構造は非常にシンプルです。

次のような形式で書きます。

if 条件:
    # 条件が真の場合に実行される処理

ここで重要なのは、条件部分と処理部分です。

条件部分には、真偽値(TrueまたはFalse)を返す式を書きます。

そして、その条件が真(True)の場合にのみ、インデント(字下げ)された処理部分が実行されます。

具体的な例を見てみましょう。

age = 25

if age >= 20:
    print("成人です")

# 実行結果:
# 成人です

この例では、変数ageの値が20以上かどうかを判定しています。

25は20以上なので、条件は真となり、”成人です”というメッセージが表示されます。

if文には、条件が偽の場合の処理を指定するelseを追加することもできます。

age = 18

if age >= 20:
    print("成人です")
else:
    print("未成年です")

# 実行結果:
# 未成年です

さらに、複数の条件を順番に確認したい場合は、elifを使用します。

score = 75

if score >= 90:
    print("優秀です")
elif score >= 70:
    print("良好です")
else:
    print("頑張りましょう")

# 実行結果:
# 良好です

このように、if文を使うことで、様々な条件に応じて異なる処理を行うことができます。

プログラムの流れを制御する上で、if文は非常に強力なツールとなります。

○数値判定に使う比較演算子

数値を判定する際、比較演算子が重要な役割を果たします。

Pythonには次のような比較演算子があります。

  • == (等しい)
  • != (等しくない)
  • < (未満)
  • <= (以下)
  • > (より大きい)
  • >= (以上)

例えば、ある数が偶数かどうかを判定する場合、次のようなコードを書くことができます。

number = 10

if number % 2 == 0:
    print(f"{number}は偶数です")
else:
    print(f"{number}は奇数です")

# 実行結果:
# 10は偶数です

この例では、numberを2で割った余り(%演算子を使用)が0と等しいかどうかを判定しています。

余りが0なら偶数、そうでなければ奇数となります。

比較演算子を使いこなせるようになると、より複雑な条件分岐も簡単に記述できるようになります。

例えば、ある数が特定の範囲内にあるかどうかを判定する場合、次のようなコードを書くことができます。

temperature = 25

if 20 <= temperature <= 30:
    print("快適な温度です")
else:
    print("少し暑いか寒いかもしれません")

# 実行結果:
# 快適な温度です

この例では、temperatureが20以上30以下であるかどうかを一度に判定しています。

Pythonでは、このような複合条件を直感的に書くことができます。

○複合条件の作成方法

より複雑な条件を作成したい場合、論理演算子を使用します。

Pythonには次の論理演算子があります。

  • and (両方の条件が真)
  • or (少なくとも一方の条件が真)
  • not (条件の否定)

例えば、ある人が運転免許を取得できるかどうかを判定する場合、次のようなコードを書くことができます。

age = 18
has_passed_test = True

if age >= 18 and has_passed_test:
    print("運転免許を取得できます")
else:
    print("運転免許を取得できません")

# 実行結果:
# 運転免許を取得できます

この例では、年齢が18歳以上(age >= 18)かつ試験に合格している(has_passed_test)という2つの条件を「and」で結合しています。

両方の条件が満たされた場合にのみ、運転免許を取得できると判定されます。

また、「or」を使用すると、複数の条件のうち少なくとも1つが真である場合に真となる条件を作成できます。

is_holiday = False
is_weekend = True

if is_holiday or is_weekend:
    print("お休みです")
else:
    print("仕事です")

# 実行結果:
# お休みです

この例では、祝日(is_holiday)または週末(is_weekend)のいずれかであれば、「お休みです」と表示されます。

「not」演算子は、条件の真偽を反転させます。

is_raining = False

if not is_raining:
    print("晴れています")
else:
    print("雨が降っています")

# 実行結果:
# 晴れています

この例では、「雨が降っていない」という条件を「not is_raining」と表現しています。

複合条件を使いこなすことで、より複雑な状況を正確に表現できるようになります。

例えば、ある商品の割引条件を判定する場合、次のようなコードを書くことができます。

is_member = True
purchase_amount = 5000
is_sale_period = False

if (is_member and purchase_amount >= 3000) or is_sale_period:
    print("割引が適用されます")
else:
    print("通常価格です")

# 実行結果:
# 割引が適用されます

この例では、会員(is_member)で3000円以上の購入(purchase_amount >= 3000)、またはセール期間中(is_sale_period)という条件を表現しています。

括弧を使って優先順位を明確にすることで、複雑な条件でも読みやすいコードを書くことができます。

●数値判定の基本パターン

数値判定は、プログラミングにおいて非常に一般的な操作です。

ここでは、Pythonのif文を使った数値判定の基本的なパターンをいくつか紹介します。

このパターンを理解し、応用することで、様々な状況に対応できるようになります。

○サンプルコード1:等値判定

等値判定は、ある値が特定の値と等しいかどうかを判断します。

例えば、ユーザーが入力した数字が当たり番号と一致するかどうかを確認する場合に使用できます。

lucky_number = 7
user_guess = int(input("1から10までの数字を当ててください: "))

if user_guess == lucky_number:
    print("当たり!おめでとうございます!")
else:
    print("残念、はずれです。")

# 実行例:
# 1から10までの数字を当ててください: 7
# 当たり!おめでとうございます!

このコードでは、「==」演算子を使って、ユーザーが入力した数字(user_guess)が当たり番号(lucky_number)と等しいかどうかを判定しています。

等しい場合は「当たり」のメッセージが、そうでない場合は「はずれ」のメッセージが表示されます。

また、等しくないことを判定する場合は「!=」演算子を使用します。

forbidden_number = 13
user_input = int(input("好きな数字を入力してください: "))

if user_input != forbidden_number:
    print("その数字は使用可能です。")
else:
    print("申し訳ありませんが、その数字は使用できません。")

# 実行例:
# 好きな数字を入力してください: 7
# その数字は使用可能です。

この例では、ユーザーが入力した数字が禁止された数字(forbidden_number)と等しくないかどうかを判定しています。

○サンプルコード2:大小比較

大小比較は、ある値が他の値より大きいか小さいかを判断します。

例えば、年齢制限のあるサービスで、ユーザーが利用可能かどうかを判定する場合に使用できます。

age = int(input("あなたの年齢を入力してください: "))
minimum_age = 18

if age >= minimum_age:
    print("サービスを利用できます。")
else:
    print(f"申し訳ありませんが、{minimum_age}歳未満の方はご利用いただけません。")

# 実行例:
# あなたの年齢を入力してください: 20
# サービスを利用できます。

このコードでは、「>=」演算子を使って、ユーザーの年齢(age)が最小年齢(minimum_age)以上かどうかを判定しています。

大小比較では、「<」(より小さい)、「<=」(以下)、「>」(より大きい)、「>=」(以上)の4つの演算子を使い分けることで、様々な条件を表現できます。

例えば、成績に応じて異なるメッセージを表示するプログラムを考えてみましょう。

score = float(input("テストの点数を入力してください(0-100): "))

if score >= 90:
    print("素晴らしい成績です!")
elif score >= 80:
    print("よくがんばりました!")
elif score >= 70:
    print("合格です。")
else:
    print("もう少し頑張りましょう。")

# 実行例:
# テストの点数を入力してください(0-100): 85
# よくがんばりました!

この例では、複数の条件分岐を使って、点数の範囲に応じて異なるメッセージを表示しています。

条件は上から順に評価され、最初に真となった条件に対応する処理が実行されます。

○サンプルコード3:範囲チェック

範囲チェックは、ある値が特定の範囲内にあるかどうかを判断します。

例えば、入力された数値が有効な範囲内にあるかどうかを確認する場合に使用できます。

temperature = float(input("現在の気温を入力してください(摂氏): "))

if 20 <= temperature <= 25:
    print("快適な気温です。")
elif 15 <= temperature < 20:
    print("少し肌寒いかもしれません。")
elif 25 < temperature <= 30:
    print("少し暑いかもしれません。")
else:
    print("極端な気温です。注意が必要です。")

# 実行例:
# 現在の気温を入力してください(摂氏): 22
# 快適な気温です。

この例では、気温が特定の範囲内にあるかどうかを判定しています。

Pythonでは、「20 <= temperature <= 25」のように、複数の比較を1行で書くことができます。

また、範囲チェックは、入力値のバリデーション(検証)にも使用できます。

例えば、1から100までの数字のみを受け付けるプログラムを考えてみましょう。

while True:
    try:
        number = int(input("1から100までの数字を入力してください: "))
        if 1 <= number <= 100:
            print(f"入力された数字は{number}です。")
            break
        else:
            print("エラー: 1から100までの数字を入力してください。")
    except ValueError:
        print("エラー: 有効な数字を入力してください。")

# 実行例:
# 1から100までの数字を入力してください: 150
# エラー: 1から100までの数字を入力してください。
# 1から100までの数字を入力してください: 75
# 入力された数字は75です。

この例では、whileループとtry-except文を組み合わせて、ユーザーが有効な入力を行うまで繰り返し入力を求めています。

入力された数字が1から100の範囲内にある場合のみ、プログラムが終了します。

●if文を使った高度な数値判定テクニック

Pythonのif文を駆使すると、複雑な数値判定も簡単に行えます。

基本的な使い方を押さえたら、もう一歩進んで高度なテクニックに挑戦してみましょう。

複数の条件を組み合わせたり、コードをより簡潔に書いたりする方法を学べば、プログラミングの幅がぐっと広がります。

○サンプルコード4:複数の条件を組み合わせる

実際のプログラミングでは、単純な条件だけでなく、複数の条件を組み合わせて判断することがよくあります。

例えば、ある商品の割引条件を判定する場合を考えてみましょう。

def check_discount(price, is_member, purchase_count):
    if price >= 10000 and (is_member or purchase_count > 5):
        return "20%割引が適用されます"
    elif price >= 5000 or (is_member and purchase_count > 2):
        return "10%割引が適用されます"
    else:
        return "割引は適用されません"

# テスト
print(check_discount(12000, True, 1))   # 20%割引
print(check_discount(8000, False, 6))   # 20%割引
print(check_discount(6000, True, 1))    # 10%割引
print(check_discount(4000, False, 1))   # 割引なし

# 実行結果:
# 20%割引が適用されます
# 20%割引が適用されます
# 10%割引が適用されます
# 割引は適用されません

この例では、商品の価格、会員かどうか、購入回数の3つの条件を組み合わせて割引率を決定しています。

「and」や「or」を使って複数の条件を結合し、複雑な判定を行っています。

括弧を使うことで、条件の優先順位も明確に指定できます。

○サンプルコード5:三項演算子の活用

三項演算子を使うと、シンプルなif-else文をより簡潔に書くことができます。

特に、条件に応じて変数に値を代入する場合に便利です。

def get_ticket_price(age):
    return 1000 if age < 12 else 1500

# テスト
print(f"10歳の場合:{get_ticket_price(10)}円")
print(f"15歳の場合:{get_ticket_price(15)}円")

# 実行結果:
# 10歳の場合:1000円
# 15歳の場合:1500円

この例では、年齢に応じてチケットの価格を決定しています。

三項演算子を使うことで、通常のif-else文よりも簡潔にコードを書くことができます。

ただし、複雑な条件の場合は読みにくくなる可能性があるので、使用する際は注意が必要です。

○サンプルコード6:ネストしたif文の使い方

条件分岐が複雑な場合、if文の中にさらにif文を入れる「ネスト」という技法を使うことがあります。

例えば、ユーザーの年齢と性別に応じて異なるメッセージを表示するプログラムを考えてみましょう。

def get_message(age, gender):
    if age < 18:
        if gender == "male":
            return "若い男性の皆様、未来は明るいです!"
        elif gender == "female":
            return "若い女性の皆様、可能性は無限大です!"
        else:
            return "若い皆様、素晴らしい人生が待っています!"
    else:
        if gender == "male":
            return "男性の皆様、今日も一日頑張りましょう!"
        elif gender == "female":
            return "女性の皆様、素敵な一日をお過ごしください!"
        else:
            return "皆様、素晴らしい一日をお過ごしください!"

# テスト
print(get_message(15, "male"))
print(get_message(20, "female"))
print(get_message(30, "other"))

# 実行結果:
# 若い男性の皆様、未来は明るいです!
# 女性の皆様、素敵な一日をお過ごしください!
# 皆様、素晴らしい一日をお過ごしください!

この例では、まず年齢で大きく分岐し、その中でさらに性別によって分岐しています。

ネストしたif文を使うことで、複数の条件を組み合わせた複雑な判定を行うことができます。

ただし、ネストが深くなりすぎると可読性が低下するので、適度に使用することが大切です。

●実践的な数値判定の応用例

ここまで学んだ数値判定のテクニックを、実際のプログラミングでどのように活用できるか見ていきましょう。

実践的な例を通じて、数値判定の有用性と応用力を身につけることができます。

○サンプルコード7:成績評価システム

学生の成績を評価するシステムを作ってみましょう。

点数に応じて異なる評価を返す関数を実装します。

def evaluate_grade(score):
    if not isinstance(score, (int, float)) or score < 0 or score > 100:
        return "無効な点数です。0から100の間で入力してください。"
    elif score >= 90:
        return "A"
    elif score >= 80:
        return "B"
    elif score >= 70:
        return "C"
    elif score >= 60:
        return "D"
    else:
        return "F"

# テスト
scores = [95, 82, 75, 60, 45, 100, 0, -5, 105, "invalid"]
for score in scores:
    print(f"点数 {score}: 評価 {evaluate_grade(score)}")

# 実行結果:
# 点数 95: 評価 A
# 点数 82: 評価 B
# 点数 75: 評価 C
# 点数 60: 評価 D
# 点数 45: 評価 F
# 点数 100: 評価 A
# 点数 0: 評価 F
# 点数 -5: 評価 無効な点数です。0から100の間で入力してください。
# 点数 105: 評価 無効な点数です。0から100の間で入力してください。
# 点数 invalid: 評価 無効な点数です。0から100の間で入力してください。

この例では、入力値のバリデーション(検証)も行っています。

点数が有効な範囲内かどうかを最初にチェックし、無効な入力に対してはエラーメッセージを返しています。

こうすることで、より堅牢なプログラムを作ることができます。

○サンプルコード8:割引計算プログラム

商品の価格と数量に応じて割引を適用する関数を作成してみましょう。

購入数量が増えるほど割引率が上がるようなシステムを考えます。

def calculate_discount(price, quantity):
    total = price * quantity
    if quantity >= 100:
        discount = 0.2  # 20%割引
    elif quantity >= 50:
        discount = 0.15  # 15%割引
    elif quantity >= 10:
        discount = 0.1  # 10%割引
    else:
        discount = 0

    discounted_total = total * (1 - discount)
    return round(discounted_total, 2)

# テスト
print(f"5個購入: {calculate_discount(100, 5)}円")
print(f"15個購入: {calculate_discount(100, 15)}円")
print(f"60個購入: {calculate_discount(100, 60)}円")
print(f"120個購入: {calculate_discount(100, 120)}円")

# 実行結果:
# 5個購入: 500.0円
# 15個購入: 1350.0円
# 60個購入: 5100.0円
# 120個購入: 9600.0円

この例では、購入数量に応じて異なる割引率を適用しています。

if-elif文を使って段階的な割引を実現しています。

また、round関数を使って小数点以下2桁に四捨五入することで、金額を適切に表示しています。

○サンプルコード9:素数判定アルゴリズム

数学的な問題を解くのにも、if文による数値判定は活用できます。

ここでは、与えられた数が素数かどうかを判定する関数を実装してみましょう。

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

# テスト
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 97, 100]
for num in numbers:
    result = "素数" if is_prime(num) else "素数ではない"
    print(f"{num}は{result}")

# 実行結果:
# 1は素数ではない
# 2は素数
# 3は素数
# 4は素数ではない
# 5は素数
# 6は素数ではない
# 7は素数
# 8は素数ではない
# 9は素数ではない
# 10は素数ではない
# 97は素数
# 100は素数ではない

この例では、素数の定義に基づいて判定を行っています。

2未満の数は素数ではないという条件と、2からその数の平方根までの数で割り切れるかどうかをチェックしています。

効率的な判定のために、平方根までしかチェックしていないところがポイントです。

○サンプルコード10:データ分析での閾値処理

データ分析や機械学習の前処理では、特定の閾値を基準にデータを分類したり、異常値を検出したりすることがあります。

ここでは、気温データから異常値を検出する例を見てみましょう。

import random

def detect_anomalies(temperatures, low_threshold, high_threshold):
    anomalies = []
    for i, temp in enumerate(temperatures):
        if temp < low_threshold or temp > high_threshold:
            anomalies.append((i, temp))
    return anomalies

# テストデータの生成
random.seed(42)  # 再現性のために乱数のシードを固定
temperatures = [random.uniform(15, 35) for _ in range(100)]
temperatures[42] = 5  # 異常値を挿入
temperatures[75] = 40  # 異常値を挿入

# 異常値の検出
anomalies = detect_anomalies(temperatures, 10, 38)

print(f"検出された異常値: {len(anomalies)}")
for index, temp in anomalies:
    print(f"インデックス {index}: 気温 {temp:.2f}°C")

# 実行結果:
# 検出された異常値: 2
# インデックス 42: 気温 5.00°C
# インデックス 75: 気温 40.00°C

この例では、気温データの中から、設定した閾値(ここでは10°C未満または38°C超)を超える値を異常値として検出しています。

実際のデータ分析では、このような前処理がデータの質を向上させ、より正確な分析結果を得るのに役立ちます。

●数値判定時のよくあるエラーと対処法

プログラミングの道を歩み始めた皆さん、数値判定を行う際にはいくつかの落とし穴が待ち構えています。

でも心配はいりません。

よくあるエラーとその対処法を把握しておけば、スムーズにコーディングを進められるはずです。

ここでは、数値判定時に遭遇しがちな3つの主要なエラーについて詳しく解説します。

○TypeError:異なる型の比較

まず最初に取り上げるのは、TypeErrorです。

文字通り、型の不一致から生じるエラーです。

Pythonは動的型付け言語ですが、異なる型同士を比較しようとするとエラーが発生します。

例えば、数値と文字列を比較しようとした場合です。

age = 25
user_input = input("あなたの年齢を入力してください: ")

if age < user_input:
    print("あなたは私より年上です")
else:
    print("あなたは私より年下です")

# 実行例:
# あなたの年齢を入力してください: 30
# TypeError: '<' not supported between instances of 'int' and 'str'

一見問題なさそうに見えるコードですが、実行するとTypeErrorが発生します。

なぜでしょうか?原因は、input関数が常に文字列を返すからです。

そのため、整数型のageと文字列型のuser_inputを比較しようとして、エラーが起きているわけです。

この問題を解決するには、user_inputを整数に変換する必要があります。

次のように修正しましょう。

age = 25
user_input = input("あなたの年齢を入力してください: ")

try:
    user_age = int(user_input)
    if age < user_age:
        print("あなたは私より年上です")
    else:
        print("あなたは私より年下です")
except ValueError:
    print("有効な数字を入力してください")

# 実行例:
# あなたの年齢を入力してください: 30
# あなたは私より年上です

この修正版では、int関数を使ってuser_inputを整数に変換しています。

また、try-except文を使用して、ユーザーが数字以外の入力をした場合のエラー処理も行っています。

こうすることで、プログラムの堅牢性が向上します。

○ZeroDivisionError:ゼロ除算の回避

次に注意すべきは、ZeroDivisionErrorです。

0で割り算を行おうとすると、このエラーが発生します。

数学的に定義されていない操作なので、Pythonはエラーを返します。

def calculate_average(total, count):
    return total / count

print(calculate_average(100, 0))

# 実行結果:
# ZeroDivisionError: division by zero

この問題を回避するには、除数が0になる可能性がある場合、事前にチェックを行う必要があります。

次のように修正しましょう。

def calculate_average(total, count):
    if count == 0:
        return 0  # または適切な値や、エラーメッセージを返す
    return total / count

print(calculate_average(100, 5))  # 20.0
print(calculate_average(100, 0))  # 0

# 実行結果:
# 20.0
# 0

この修正版では、countが0の場合に0を返すようにしています。

ただし、具体的にどう処理するかは、プログラムの要件によって異なります。

場合によっては、0の代わりにNoneを返したり、エラーメッセージを返したりすることもあるでしょう。

○浮動小数点数の比較における注意点

最後に、浮動小数点数の比較に関する注意点です。

浮動小数点数は、コンピュータ内部での表現の都合上、厳密な値を持たない場合があります。

そのため、等値比較を行うと思わぬ結果になることがあります。

x = 0.1 + 0.2
y = 0.3

if x == y:
    print("xとyは等しい")
else:
    print("xとyは等しくない")

print(f"x = {x}")
print(f"y = {y}")

# 実行結果:
# xとyは等しくない
# x = 0.30000000000000004
# y = 0.3

驚くべきことに、0.1 + 0.2は厳密に0.3とはならないのです。

浮動小数点数の内部表現の限界により、微小な誤差が生じてしまいます。

この問題に対処するには、「ほぼ等しい」かどうかを判定する方法を使います。

具体的には、2つの値の差の絶対値が、十分小さいかどうかをチェックします。

import math

def is_close(a, b, rel_tol=1e-9, abs_tol=0.0):
    return math.isclose(a, b, rel_tol=rel_tol, abs_tol=abs_tol)

x = 0.1 + 0.2
y = 0.3

if is_close(x, y):
    print("xとyはほぼ等しい")
else:
    print("xとyは等しくない")

print(f"x = {x}")
print(f"y = {y}")

# 実行結果:
# xとyはほぼ等しい
# x = 0.30000000000000004
# y = 0.3

この例では、Python 3.5以降で導入されたmath.isclose関数を使用しています。

この関数は、2つの値がある許容範囲内で等しいかどうかを判定します。

rel_tolは相対許容誤差、abs_tolは絶対許容誤差を指定します。

●Pythonの数値判定をマスターするためのTips

数値判定の基本を押さえたところで、より高度なテクニックをいくつか紹介します。

プログラミングの腕を磨くのに役立つTipsを、皆さんにお伝えしましょう。

○型変換を活用した柔軟な判定

プログラミングでは、異なる型のデータを扱うことがよくあります。

例えば、ユーザー入力は通常文字列として取得されますが、数値として処理したい場合があります。

そんな時は、型変換を活用しましょう。

def process_age(age_input):
    try:
        age = int(age_input)
        if age < 0:
            return "年齢は正の整数で入力してください"
        elif age < 20:
            return "未成年です"
        elif age < 65:
            return "成人です"
        else:
            return "シニアです"
    except ValueError:
        return "有効な年齢を入力してください"

# テスト
inputs = ["25", "-5", "70", "abc", "18.5"]
for inp in inputs:
    print(f"入力: {inp}, 結果: {process_age(inp)}")

# 実行結果:
# 入力: 25, 結果: 成人です
# 入力: -5, 結果: 年齢は正の整数で入力してください
# 入力: 70, 結果: シニアです
# 入力: abc, 結果: 有効な年齢を入力してください
# 入力: 18.5, 結果: 有効な年齢を入力してください

この例では、int関数を使って文字列を整数に変換しています。

try-except文を使うことで、変換できない入力(文字列や小数)に対してもエラーメッセージを返せるようになっています。

○lambda関数との組み合わせ

lambda関数は、小さな無名関数を作成するのに便利です。

数値判定と組み合わせると、コードをより簡潔に書くことができます。

# 成績を評価する関数を作成
grade_function = lambda score: "A" if score >= 90 else "B" if score >= 80 else "C" if score >= 70 else "D" if score >= 60 else "F"

# テスト
scores = [95, 88, 72, 65, 59]
for score in scores:
    print(f"点数: {score}, 成績: {grade_function(score)}")

# 実行結果:
# 点数: 95, 成績: A
# 点数: 88, 成績: B
# 点数: 72, 成績: C
# 点数: 65, 成績: D
# 点数: 59, 成績: F

この例では、lambda関数を使って成績評価の関数を一行で定義しています。

複数の条件分岐を連鎖させることで、複雑な判定ロジックを簡潔に表現できます。

○数学モジュールを使った高度な判定

Pythonの標準ライブラリにある数学モジュール(math)を使うと、より高度な数値判定が可能になります。

例えば、ある数が別の数の倍数かどうかを判定する関数を作ってみましょう。

import math

def is_multiple(n, m):
    return math.isclose(n % m, 0, abs_tol=1e-9)

# テスト
test_cases = [
    (10, 2),  # 10は2の倍数
    (15, 4),  # 15は4の倍数ではない
    (0.3, 0.1),  # 0.3は0.1の倍数(浮動小数点数の誤差を考慮)
    (1e-10, 1e-11)  # 非常に小さな数の倍数判定
]

for n, m in test_cases:
    result = "倍数です" if is_multiple(n, m) else "倍数ではありません"
    print(f"{n}は{m}の{result}")

# 実行結果:
# 10は2の倍数です
# 15は4の倍数ではありません
# 0.3は0.1の倍数です
# 1e-10は1e-11の倍数です

この例では、math.isclose関数を使って、余りが0に十分近いかどうかを判定しています。

浮動小数点数の誤差を考慮した判定が可能になっています。

まとめ

Pythonのif文を用いた数値判定について、幅広く解説してきました。

Pythonのif文と数値判定は、プログラミングの基礎中の基礎です。

しかし、基礎といっても侮れません。

適切に使いこなせるようになれば、複雑な問題も解決できるようになります。

今回学んだことを、ぜひ実際のコーディングで活用してみてください。