Pythonで整数かどうかを判定する方法!初心者向けに解説

python icon
Python

こんにちは、とまだです。

Pythonで数値を扱っていて、「この値って本当に整数なの?」と疑問に思ったことはありませんか?

実は、整数かどうかの判定は、プログラミングの基本でありながら、意外と奥が深いテーマなんです。

今回は、Pythonにおける整数判定の方法を、初心者の方でも理解しやすいように解説していきます。

整数判定って何?日常に例えると

整数判定を日常生活に例えると、レジでお金を数えるときの作業に似ています。

100円玉や500円玉は「整数」として扱えますよね。

でも、「100.5円」という硬貨は存在しません。

プログラミングでも同じように、「10」は整数ですが、「10.5」は整数ではありません。

この違いを見分けることが、整数判定の役割です。

なぜ整数判定が必要なの?

整数判定が必要になる理由はいくつかあります。

まず、計算の精度を保つためです。

小数を含む計算では誤差が生じることがありますが、整数同士の計算なら正確な結果が得られます。

次に、不正な入力を防ぐためです。

例えば、年齢を入力してもらうフォームで「25.7歳」と入力されたら困りますよね。

そこで整数判定を使って、適切な値だけを受け付けるようにします。

基本的な整数判定の方法

type()関数を使う方法

最もシンプルな方法から見ていきましょう。

# 変数の型をチェックする
x = 10

if type(x) == int:
    print("xは整数です")
else:
    print("xは整数ではありません")

このコードでは、type()関数を使って変数の型を調べています。

返ってきた型がint(整数型)と一致すれば、その変数は整数だと判断できます。

isinstance()関数を使う方法

もう少し柔軟な判定方法もあります。

# isinstance()での判定
x = 10

if isinstance(x, int):
    print("xは整数です")
else:
    print("xは整数ではありません")

isinstance()関数は、より高度な判定が可能です。

継承関係にある型も含めて判定できるため、実務ではこちらがよく使われます。

文字列が整数かどうかを判定する

実際の開発では、ユーザーからの入力を扱うことが多いです。

入力は基本的に文字列として受け取るため、それが整数として有効かどうかを確認する必要があります。

isdigit()メソッドを使う

文字列が数字だけで構成されているかチェックできます。

# 文字列が数字かどうかチェック
user_input = "123"

if user_input.isdigit():
    print("数字として解釈できます")
    number = int(user_input)
    print(f"整数に変換: {number}")
else:
    print("数字ではありません")

ただし、isdigit()にはいくつか注意点があります。

マイナス記号を含む「-123」のような値は、Falseを返してしまいます。

try-except文で変換を試みる

より実践的な方法として、実際に変換してみる方法があります。

# 変換を試みて判定する
user_input = "-123"

try:
    number = int(user_input)
    print(f"整数に変換成功: {number}")
except ValueError:
    print("整数として変換できません")

この方法なら、マイナス記号付きの数字も正しく判定できます。

エラーが発生しなければ整数として有効、エラーが出たら無効と判断します。

実践的な整数判定の例

ユーザー入力の検証

年齢を入力してもらうプログラムを例に考えてみましょう。

# 年齢入力の検証
def get_age():
    while True:
        age_input = input("年齢を入力してください: ")

        # 前後の空白を削除
        age_input = age_input.strip()

        try:
            age = int(age_input)

            # 年齢として妥当な範囲かチェック
            if 0 <= age <= 150:
                return age
            else:
                print("0〜150の範囲で入力してください")

        except ValueError:
            print("整数を入力してください")

# 使用例
age = get_age()
print(f"入力された年齢: {age}")

このコードでは、整数判定に加えて範囲チェックも行っています。

実務では、このように複数の検証を組み合わせることが一般的です。

リストの中から整数だけを抽出

様々な型が混在するリストから、整数だけを取り出したい場合もあります。

# 混在するデータから整数を抽出
mixed_data = [10, "hello", 3.14, 42, "100", True, 25]

# 整数だけを抽出
integers = []

for item in mixed_data:
    if isinstance(item, int) and not isinstance(item, bool):
        integers.append(item)

print(f"整数のみ: {integers}")  # [10, 42, 25]

Pythonではbool型(True/False)もint型の一種として扱われるため、追加の条件を付けています。

よくある間違いと対処法

浮動小数点数との混同

整数判定でよくある間違いが、小数点以下がゼロの場合です。

# 10.0は整数?
x = 10.0

print(type(x))  # <class 'float'>
print(isinstance(x, int))  # False

# 整数として扱いたい場合
if x.is_integer():
    print(f"{x}は整数値です")
    x_int = int(x)
    print(f"整数に変換: {x_int}")

10.0は数学的には整数ですが、Pythonでは浮動小数点数として扱われます。

文字列の前後の空白

ユーザー入力では、気づかない空白が含まれることがあります。

# 空白を含む入力の処理
user_input = "  42  "

# そのまま判定すると失敗
print(user_input.isdigit())  # False

# 空白を除去してから判定
cleaned_input = user_input.strip()
print(cleaned_input.isdigit())  # True

strip()メソッドで前後の空白を除去することで、正しく判定できるようになります。

整数判定のベストプラクティス

目的に応じた方法を選ぶ

整数判定の方法は、使用する場面によって使い分けることが大切です。

プログラム内部で型をチェックする場合は、isinstance()が適しています。

ユーザー入力を検証する場合は、try-exceptで実際に変換を試みる方法が確実です。

エラーメッセージを分かりやすく

ユーザーに向けたエラーメッセージは、具体的で分かりやすくしましょう。

# 良いエラーメッセージの例
def validate_quantity():
    quantity = input("購入数を入力してください: ")

    try:
        num = int(quantity)
        if num <= 0:
            print("1個以上の数を入力してください")
            return None
        return num
    except ValueError:
        print(f"「{quantity}」は数字ではありません。半角数字で入力してください")
        return None

エラーの原因と対処法を明確に伝えることで、ユーザーの混乱を防げます。

まとめ

Pythonにおける整数判定について、基本から実践まで解説しました。

type()isinstance()を使った型チェック、文字列の場合はisdigit()try-exceptを使った方法など、様々なアプローチがあります。

それぞれの方法には特徴があるので、状況に応じて使い分けることが重要です。

整数判定は一見シンプルですが、実務では様々なケースを想定する必要があります。

今回紹介した方法を組み合わせて、堅牢なプログラムを作っていきましょう。

ぜひ実際にコードを書いて、整数判定の動作を確認してみてください。

共有:

著者について

とまだ

とまだ

フルスタックエンジニア

Learning Next の創設者。Ruby on Rails と React を中心に、プログラミング教育に情熱を注いでいます。初心者が楽しく学べる環境作りを目指しています。

著者の詳細を見る →