2017-10-09 136 views
2

所以我創建了一個程序來顯示數字系統,但是我遇到了第一個障礙問題。該程序將從用戶處獲取一個數字,然後在整個程序中使用該數字來解釋幾個計算機科學概念。檢查字符串是整數還是浮點數

當解釋我的第一部分,數字系統時,程序會說出它是什麼類型的數字。我通過將字符串轉換爲浮點數來完成此操作。如果浮點數在它之後只有'.0',那麼它將它轉換成一個整數。

目前我使用這個代碼

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

這是非常有用的,因爲它表明如果用戶輸入的數字或沒有。不過,我不確定如何現在檢查小數點後的值,以檢查是否應將其轉換爲整數。有小費嗎?

回答

3

如果字符串爲可轉換爲整數,它只能是數字。應該指出的是,正如@cwallenpoole所說,這種方法不適用於「 - 」字符的負輸入。你可以這樣做:

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

如果已經確認號碼作爲浮動,您可以隨時使用is_integer(含底片作品):

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

不適用於負數。 – cwallenpoole

+1

使用'int(NumberString)'(在'try'中處理'ValueError')而不是使用'.isdigit'來檢查一個字符串是否可以被解析爲一個'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. 
相關問題