2016-08-21 51 views
1

我定義低於一個方法應該採取5整數/浮點值作爲輸入,並一個列表對象(lst參數)並且僅返回公式Fr正解。 F的公式應該返回一個列表,其中每個元素都使用給定的公式進行相乘/相減。錯誤:無法由型的非INT乘以序列「MUL」

我上面提到的錯誤Error : Can't multiply sequence by non-int of type 'Mul'。我錯過了什麼?

from sympy import * 
from math import pi 
class solarheating: 

    def circular_rr(T0,T,lst,m,Cp,Eg): 

     r = var('r') 
     F = T0+pi*r**2*Eg/(m*Cp)*lst-T 
     r = solve(F,r) 

     return r[1] 

    lst = [0,0.25,0.5,0.75,1.0,1.25] 
    a = circular_rr(20,15,lst,.24,4.2,.928) 
    print(a) 
+0

如果你的變化,會發生什麼的'self.r = ...'行'到自.r = [在F中解決(f,self.r)f]'? –

+0

不要編輯你的問題把它變成一個全新的問題,即使問題是關於相同的任務。 – user2357112

回答

1

你忘了通過在其上的代碼被調用的方法的對象(或self)的實例。由於沒有self,所以你得到非整數錯誤,因爲T0變成了self,T變成了T0,然後你的lst被用作T。既然你不能從列表中減去一個int,這就產生了一個錯誤。

下面是更正後的代碼。

from sympy import * 
from math import pi 

class solar heating: 

    def circular_rr(self,T0,T,lst,m,Cp,Eg): 
     r = var('r') 
     F = T0+pi*r**2*Eg/(m*Cp)*lst-T 
     r = solve(F,r)  
     return r[1] 

lst = [0,0.25,0.5,0.75,1.0,1.25] 
my_instance = solarheating() 
a = my_instance.circular_rr(20,15,lst,.24,4.2,.928) 
print(a) 

你需要使用self的原因是因爲Python不使用@語法來引用實例屬性。該方法在您通過self屬性傳遞的實例上調用。你實際上並沒有用Python編寫實例方法。你寫的是(必須)把實例作爲第一個參數的類方法。因此,您必須明確地將實例參數放置在某處。

編輯: 除了我上面描述的明顯的self錯誤,你乘以浮動列表。這就是導致can't multiply sequence by non-int of type 'Mul'錯誤的原因。

如果你想乘列表由浮動的每個項目,您的修正方法的代碼將是:

def circular_rr(self,T0,T,lst,m,Cp,Eg): 
     r = var('r') 
     temp_val = T0+pi*r**2*Eg/(m*Cp) 
     F = [x*temp_val-T for x in lst] 
     r = solve(F,r)  
     return r[1] 
+0

在函數中是否應該存在自我?喜歡也許self.T0和self.Eg或類似的東西?我在運行代碼時仍遇到同樣的錯誤。 –

+0

我在上面的編輯中添加了關於類型錯誤的描述。 – SashaZd

+0

我相信我想用浮點數乘以列表中的每個項目。所以我有一個列表的6個值,因此我應該得到6個值r。所以最後我想要一個6個r值的列表。 –

相關問題