2014-02-23 37 views
2

我已經有一段時間寫了一個依賴很多其他函數來返回答案的函數。當我完成它時,它說我錯誤地在某處使用了「*」。我經歷了一切,看不出有什麼問題。我終於發現,這是因爲前面定義的簡單階乘函數,如下所示:Python對int值的錯誤識別

if n == 0: 
    return 1 
elif n < 0 or (type(float)): 
    print "%s is an invalid input; Positive integer value is required" % (n) 
else: 
    return (n)*fact(n-1) 

但是如果我輸入n = 6時,它返回圖6是一個浮點數,因此離開的其餘部分功能,我希望有人能夠回答爲什麼會發生這種情況,以及如何解決這個問題。

非常感謝

+0

'type(float)'返回一個類型,所以它總是對的 –

回答

1

你的第二個條件應該是isinstance(n, float)

if n == 0: 
    return 1 
elif n < 0 or isinstance(n, float): 
    print "%s is an invalid input; Positive integer value is required" % (n) 
else: 
    return (n)*fact(n-1) 

事實上,正如你可以看到下面,isinstance檢查類型和built-in type返回類型:

>>> isinstance(1.0, float) 
True 
>>> isinstance(1, float) 
False 
>>> type(float) 
<type 'type'> 
+0

是的,這是做到了,謝謝。並感謝您的快速響應 – user3343452

4
elif n < 0 or (type(float)): 

即使當n >= 0(type(float))部分將返回typefloat,即非空或Truthy值。所以,情況總是會得到滿足的。你需要的是,isinstance

elif n < 0 or isinstance(n, float): 

但我建議,

elif not isinstance(n, int) or n < 0: 

現在,如果n名不是一個int錯誤將被拋出。