Python で文字列が数値かどうかを調べる

Isaac Tony 2023年10月10日
  1. 文字列が Python の数値で float() 関数を使用してあるかどうかを確認する
  2. 文字列が Python の数値で isdigit() および partition() 関数を使用してあるかどうかを確認する
Python で文字列が数値かどうかを調べる

文字列は、二重引用符または一重引用符で囲まれた一連の文字です。複数行にまたがる文字列は、複数行文字列とも呼ばれ、三重引用符で囲まれています。

一方、浮動小数点数は、Python で最も一般的な組み込みの数値データ型の 1つです。float または浮動小数点数は、小数点付きの数値として説明できます。

print(type(3.445))

出力:

<class 'float'>

文字列が Python の数値で float() 関数を使用してあるかどうかを確認する

Python は、あるデータ型を別のデータ型に変換する事前定義された型変換関数を提供します。これらの関数には、データ型をそれぞれ整数、文字列、および浮動小数点データ型に変換するための int()str()、および float() 関数が含まれます。

小数点を挿入して浮動小数点数を作成するだけでなく、文字列を浮動小数点数に暗黙的または明示的に変換して浮動小数点数を作成することもできます。

暗黙的な変換は、値に互換性がある場合にのみ、ユーザーの関与なしに Python によって自動的に実行されます。以下のコードに示すように、float() 関数を使用して、文字列データ型を浮動小数点数に明示的に変換できます。

count = "22.23"
print(type(count))
r = float(count)
print(type(r))

出力:

<class 'str'>
<class 'float'>

型変換は、Python およびプログラミング一般における重要な概念です。これは、プログラムで特定のデータ型を使用する必要が生じた場合に特に明白です。このような場合、型変換により、任意のデータを目的のデータ型に変換できます。

このようなインスタンスは、さまざまなプログラムへのファイルの読み取りや書き込みなどのファイル操作を実行するときによく発生します。

上記のコードスニペットでは、1 パラメーター関数 float() を使用して文字列データ型を float 数値データ型に変換しましたが、このメソッドに制限がないわけではありません。これらの制限には、文字列を含む文字列を浮動データ型に変換するためによく発生する ValueError が含まれます。

float 関数を使用すると、関数の範囲外の数値が渡された場合に OverFlow エラーが発生する可能性があります。以下のコードスニペットは、float 関数が無効な文字列を変換したときに ValueError がどのように発生するかを示しています。

name = "developer"
rslt = float(name)
print(rslt)

出力:

Traceback (most recent call last):
  File "<string>", line 2, in <module>
ValueError: could not convert string to float: 'developer'

ValueError は、変換の対象となる文字列が浮動小数点数のように見えるようにすることで回避できます。

他のインスタンスも、スペース、コンマ、またはその他の非特殊文字を含む ValueError につながる可能性があります。したがって、ファイルを操作するときは常に、文字列値が有効で浮動小数点数に変換可能かどうかを事前に確認する必要があります。

ただし、値が多すぎると、すべての値をチェックするのは非効率的です。または、文字列が浮動小数点数に変換できる有効な浮動小数点数であるかどうかをチェックする関数を作成することもできます。

文字列が有効でない場合、プログラムはエラーをスローするのではなく、例外を発生させる必要があります。

def is_valid_float(element: str) -> bool:
    try:
        float(element)
        return True
    except ValueError:
        return False

上記の関数は、引数として文字列を受け入れ、それが浮動小数点数に変換できる有効な文字列であるかどうかを確認します。この関数は、文字列が浮動小数点数に変換できる有効な文字列でない場合は false を返し、そうでない場合は true を返します。

文字列が Python の数値で isdigit() および partition() 関数を使用してあるかどうかを確認する

または、float() 関数の代わりに isdigit() 関数を使用することもできます。isdigit() 関数は、文字列に数字のみが含まれている場合は true を返し、少なくとも 1つの文字が数字でない場合は false を返します。

ただし、浮動小数点数が有効な文字列であっても、文字列に浮動小数点数が含まれている場合、この関数は false を返します。

def is_valid_string(element):
    if element.isdigit():
        print("String is valid")
    else:
        print("String is not valid")


is_valid_string("4546.4646")

出力:

String is not valid

partition 関数を使用して、文字列に浮動小数点数が含まれている場合でも、isdigit() 関数が false ステートメントを返さないようにします。

この関数を使用すると、浮動小数点数を含む文字列をパーツに分割して、それらが数字であるかどうかを確認できます。両方の部分が数字の場合、関数はこれが有効な文字列であることを通知します。

def check_float(element):
    partition = element.partition(".")

    if element.isdigit():
        newelement = float(element)
        print("string is valid")

    elif (
        (partition[0].isdigit() and partition[1] == "." and partition[2].isdigit())
        or (partition[0] == "" and partition[1] == "." and partition[2].isdigit())
        or (partition[0].isdigit() and partition[1] == "." and partition[2] == "")
    ):
        newelement = float(element)
        print(newelement)
        print("String is also valid !")
    else:
        print("string is not valid !")


check_float("234.34")

出力:

234.34
String is also valid !

文字列に浮動小数点以外の数字が含まれている場合、関数は文字列を分割する必要がないことに注意してください。

def check_float(element):
    partition = element.partition(".")

    if element.isdigit():
        newelement = float(element)
        print("string is valid")

    elif (
        (partition[0].isdigit() and partition[1] == "." and partition[2].isdigit())
        or (partition[0] == "" and partition[1] == "." and partition[2].isdigit())
        or (partition[0].isdigit() and partition[1] == "." and partition[2] == "")
    ):
        newelement = float(element)
        print(newelement)
        print("String is also valid !")
    else:
        print("string is not valid !")


check_float("234")

出力:

string is valid

一方、文字列に数字と見なすことができない文字を含む浮動小数点数が含まれている場合、浮動小数点は有効な文字列ではありません。この場合、有効な文字列とは、float() 関数を使用して浮動小数点数に変換できる文字列を指します。

def check_float(element):
    partition = element.partition(".")

    if element.isdigit():
        newelement = float(element)
        print("string is valid")

    elif (
        (partition[0].isdigit() and partition[1] == "." and partition[2].isdigit())
        or (partition[0] == "" and partition[1] == "." and partition[2].isdigit())
        or (partition[0].isdigit() and partition[1] == "." and partition[2] == "")
    ):
        newelement = float(element)
        print(newelement)
        print("String is also valid !")
    else:
        print("string is not valid !")


check_float("234.rt9")

出力:

string is not valid !

isdigit() 関数は、指数形式で表される整数と数字、および任意の数字の Unicode 文字に対しても true を返します。

def is_valid_string(element):
    if element.isdigit():
        print("String is valid")
    else:
        print("String is not valid")


is_valid_string("4546")

出力:

String is valid

上記のサンプルコードブ​​ロックの文字列に数字のみが含まれている場合に肯定的なメッセージを返す関数とともに、isdigit() メソッドを使用しました。ただし、数値を含まない引数を指定して関数を呼び出すと、次のコードに示すように、関数は否定メッセージを出力します。

def is_valid_string(element):
    if element.isdigit():
        print("String is valid")
    else:
        print("String is not valid")


is_valid_string("Pal Alto")

出力:

String is not valid

したがって、isdigit() 関数を使用すると、文字列が有効であり、浮動小数点数に変換できるかどうかを簡単に判断できます。空白と記号を含む文字列は、浮動小数点数に変換できません。

以下のコードに示すように、isdigit() メソッドを使用して、空白を含む文字列が有効かどうかを判断することもできます。

def is_valid_string(element):
    if element.isdigit():
        print("String is valid")
    else:
        print("String is not valid")


is_valid_string("$4546.343")

出力:

String is not valid

空白を含む文字列も同様に有効な文字列ではなく、浮動小数点数に変換できません。

def is_valid_string(element):
    if element.isdigit():
        print("String is valid")
    else:
        print("String is not valid")


is_valid_string("45 8")

出力:

String is not valid

複素数は、Python に組み込まれている 3つの数値データ型の中に等しくあります。complex() 関数と一緒に float() 関数を使用して、複素数を含む文字列を浮動小数点データ型に変換できるかどうかを判断することもできます。

complex() 関数は、整数と文字列を複素数に変換します。したがって、両方の関数を使用して、文字のシーケンスを含む文字列を浮動小数点数に変換したり、複素数に変換したりできないことを確認できます。

以下のコードに示すように、関数は、複素数を含む文字列を浮動小数点数に変換できるかどうかを確認することもできます。

def is_valid_string(str):
    try:
        float(str)
        return True
    except ValueError:
        try:
            complex(str)
        except ValueError:
            return False


print(is_valid_string("hello"))

出力:

False

逆に、整数または浮動小数点数で構成される文字列は、浮動小数点数と複素数に変換できます。したがって、上記の説明を含む引数を渡すと、関数は代わりに True を返す可能性があります。

def is_valid_string(str):
    try:
        float(str)
        return True
    except ValueError:
        try:
            complex(str)
        except ValueError:
            return False


print(is_valid_string("456.45"))

出力:

True

整数で構成される文字列も同様に有効であり、浮動小数点数と複素数に変換できます。したがって、True ステートメントも取得します。

def is_valid_string(str):
    try:
        float(str)
        return True
    except ValueError:
        try:
            complex(str)
        except ValueError:
            return False


print(is_valid_string("456"))

出力:

True
著者: Isaac Tony
Isaac Tony avatar Isaac Tony avatar

Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.

LinkedIn

関連記事 - Python String

関連記事 - Python Float