2015-09-30 47 views
1

我定義了一個分段函數是這樣的:分段函數不工作

def C1(d,x): 
    if ((x<d/2) and (x>-d/2)): 
     return (1/d) 
    else: 
     return 0 

但它總是返回我0

In [23]: C1(1000,1) 

Out[23]: 0 

回答

1

在Python,除號運算符(/)執行整數除法,這意味着任何小數點被截斷,如果分子和分母均爲整數。所以當你這樣做時(1/d),1和d都是整數,例如1/1000即爲0.001,但是在整數除法中,你會丟失小數,所以你會得到0.爲了解決這個問題,您定義的數字通過添加一個.0浮動。例如,(x < d/2.0)和(x> -d/2.0)和(1.0/d)這應該會給你正確的結果。

+1

除法運算符表現了提問者在Python 3.x中的預期方式。我只是覺得我應該提到這一點。 – SwiftsNamesake

+0

@SwiftsNamesake這是真的,雖然基於問題,我假設提問者使用2.7.x – icehockey38

+0

同樣。我只是想澄清,如果任何其他用戶偶然發現這個問題。 – SwiftsNamesake

1

嘗試from __future__ import division

這裏是鏈接到PEP 238解釋這個。

https://www.python.org/dev/peps/pep-0238/

+0

這是一件很重要的事情,但這個答案可以做一些額外的解釋。有了一個合適的編輯我會upvote這一點。 – shuttle87

+0

基本上,'__future__'' division'導入時,'/'運算符變成了「真」分區;用'int'除以int將總是產生一個'float'來確保結果(大部分)是準確的(儘管浮點有它自己的怪癖)。有或沒有進口,'//'是地板劃分;對於正整數,這意味着像C中一樣截斷整數數學,對於負整數,則舍入(例如'1 // 2 == 0',但是'-1 // 2 == -1')。 – ShadowRanger