【问题标题】:Error : Can't multiply sequence by non-int of type 'Mul'错误:不能将序列乘以“Mul”类型的非整数
【发布时间】:2016-12-28 07:44:56
【问题描述】:

我在下面定义了一个方法,它应该将 5 个整数/浮点值作为输入,以及一个列表对象(lst 参数),并且只返回方程 Fr 的正解。 F 的公式应该返回一个列表,其中每个元素都使用给定的等式进行乘法/减法。

我收到了上面提到的错误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)

【问题讨论】:

  • 如果将self.r = ... 行更改为self.r = [solve(f, self.r) for f in F] 会发生什么?
  • 不要编辑您的问题以将其变成一个全新的问题,即使这些问题是关于同一任务的。

标签: python list python-2.7


【解决方案1】:

您忘记将调用代码的对象(或self)的实例传递给方法。由于没有self,你得到了非int错误,因为T0变成了selfT变成了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 不使用@syntax 来引用实例属性。在您传入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]

【讨论】:

  • 函数的某处也应该有一个自我吗?比如 self.T0 和 self.Eg 之类的?当我运行你的代码时,我仍然遇到同样的错误。
  • 我在上面的编辑中添加了类型错误的描述。
  • 我相信我想将列表中的每个项目乘以浮点数。所以我有一个 lst 的 6 个值的列表,因此我应该得到 6 个值 r。所以最后我想要一个 6 r 值的列表。
  • @ZachThomas 检查上面的答案。我更正它以回答您的问题。您还应该编辑您的问题,使其更具体。
  • 我现在得到一个空列表作为我的输出。我更新了我的代码和上面的问题。我在想,也许是因为我没有将 r 设置为一个空列表,而不是附加它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 2013-07-03
  • 1970-01-01
  • 2017-09-02
相关资源
最近更新 更多