web-dev-qa-db-ja.com

文字列が整数または浮動小数点数かどうかを確認する

だから私は数字システムを表示するプログラムを作成していますが、最初のハードルで問題に遭遇しました。プログラムはユーザーから番号を取得し、プログラム全体でその番号を使用して、いくつかのコンピューターサイエンスの概念を説明します。

私の最初のセクションであるナンバーシステムを説明するとき、プログラムはそれがどんなタイプのナンバーであるかを言うでしょう。文字列を浮動小数点数に変換することでこれを行っています。浮動小数点数の後に「.0」しかない場合は、整数に変換します。

現在、私はこのコードを使用しています

while CorrectNumber == False:
try:
    Number = float(NumberString) - 0
    print (Number)
except:
    print ("Error! Not a number!")

これは、ユーザーが番号を入力したかどうかを示すので便利です。ただし、小数点以下の値をチェックして整数に変換するかどうかを確認する方法がわからない。任意のヒント?

7
user6470150

文字列が整数に変換可能な場合、数字のみにする必要があります。 @cwallenpooleが言ったように、このアプローチは「-」文字のために負の入力では機能しないことに注意してください。できること:

if NumberString.isdigit():
    Number = int(NumberString)
else:
    Number = float(NumberString)

Numberが既にfloatとして確認されている場合は、いつでもis_integer(ネガを使用):

if Number.is_integer():
    Number = int(Number)
6

私は質問に従うかどうかわかりませんが、ここにアイデアがあります:

test = ['1.1', '2.1', '3.0', '4', '5', '6.12']

for number in test:
    try:
        print(int(number))
    except ValueError:
        print(float(number))

戻り値:

1.1
2.1
3.0
4
5
6.12
3
kjmerf

確認する方法は次のとおりです。

a = '10'
if a.isdigit():
   print "Yes it is Integer"
Elif a.replace('.','',1).isdigit() and a.count('.') < 2:
   print "Its Float"
else:
   print "Its is Neither Integer Nor Float! Something else"

これは、小数部にゼロ以外の数字があるかどうかをチェックします。

def is_int(n):
    try:
        float_n = float(n)
        int_n = int(float_n)
    except ValueError:
        return False
    else:
        return float_n == int_n

def is_float(n):
    try:
        float_n = float(n)
    except ValueError:
        return False
    else:
        return True

機能のテスト:

nums = ['12', '12.3', '12.0', '123.002']

for num in nums:
    if is_int(num):
        print(num, 'can be safely converted to an integer.')
    Elif is_float(num):
        print(num, 'is a float with non-zero digit(s) in the fractional-part.')

以下を印刷します。

12 can be safely converted to an integer.
12.3 is a float with non-zero digit(s) in the fractional-part.
12.0 can be safely converted to an integer.
123.002 is a float with non-zero digit(s) in the fractional-part.
0
Srisaila