TypeError:不能将序列乘以类型' str'的非int。 (已使用int(str))

时间:2017-06-28 09:25:44

标签: python string complex-numbers

我正在编写一个使用python2.7计算复数乘法的函数。功能是:

server2

但是当我运行它时,我收到了这个错误:

  

在complexNumberMultiply中       返回'%s +%si' %(c * e - d * f,c * f + d * e)
  TypeError:不能将序列乘以类型' str'

的非int

我的问题是,为什么我的int(d [: - 1])没有将字符串(例如-2)变成整数?

2 个答案:

答案 0 :(得分:2)

您已将df转换为int,但ce呢?您正在尝试执行c * e,并且不能将字符串乘以字符串。

考虑:

def complexNumberMultiply(a, b):
    """
    :type a: str
    :type b: str
    :rtype: str
    """
    split_a = a.split('+')
    split_b = b.split('+')
    c, d = int(split_a[0]), int(split_a[-1][0])
    e, f = int(split_b[0]), int(split_b[-1][0])

    print (c,d,e,f)
    return '%s + %si' % (c * e - d * f, c * f + d * e)

print(complexNumberMultiply('1+2i', '3+4i'))
# 1 2 3 4
# -5+10i

或者使用Python中内置类型的complex

>>> complex('1+2j') * complex('3+4j')
(-5+10j)
>>> (1+2j) * (3+4j)
(-5+10j)

答案 1 :(得分:2)

虚数在Python中被识别为对象,就像整数,浮点数......:

>>> complexN = 33 + 2j
>>> complexN 
(33+2j)
>>> complexN.real          # real part
33.0
>>> complexN.imag          # imaginary part
2.0

添加复数:

>>> complex + (33+2j)
(66+4j)

2j是虚部,实部是33.这是在Python中处理复数的推荐方法。

但是如果你坚持使用你的功能进行实验,我不会想到使用str然后转换为int是一个好方法。为什么不直接使用数字呢?通过这种方式,您可以避免格式化函数输入的花边和口哨声。

另见: Complex numbers usage in python