2017-10-09 3 views
2

番号システムを表示するプログラムを作成していますが、最初のハードルで問題にぶつかりました。プログラムは、ユーザーから数値を取得し、いくつかのコンピュータサイエンスの概念を説明するために、プログラム全体でその数値を使用します。文字列が整数か浮動小数点かどうかを確認する

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

現在、私は、ユーザーが番号を入力するか、していない場合、それが示すようにこれは便利です、このコードに

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

を使用しています。しかし、小数点以下の値をチェックして整数に変換するかどうかを確認する方法が不明です。任意のヒント?

答えて

3

文字列を整数に変換可能であるならば、それは数字だけでなければなりません。このアプローチは@cwallenpooleが述べたように、 ' - '文字の負の入力では機能しません。あなたが行うことができます:あなたはすでに数がfloatとして確認されている場合は

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

、あなたは常にis_integerを使用することができます(ネガで動作します):

if Number.is_integer(): 
    Number = int(Number) 
+0

負の数値には適用されません。 – cwallenpoole

+1

'.isdigit'を使用するのではなく' int(NumberString) '(' try'とハンドル 'ValueError')を使用して、文字列を' int'として解析できるかどうかをチェックします。 – jacg

1

ない私は疑問に従うが、ここでの考え方であることを確認してください:

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

除い'書き込みを奨励しないでください。 'ValueError:' – jacg

+0

ありがとう@jacgを除いています。アップデートは – kbball

+0

となりました。これはより良いPythonicアプローチです。 – cwallenpoole

0

このチェックは分数部分は任意の非を持っている場合ゼロ桁。

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. 
関連する問題