+:不支持的操作数类型:在形成带数字因子的字符串时为“ Symbol”和“ str”

时间:2018-09-21 15:54:58

标签: sympy

我收到此错误。 宏我在做什么错?

from sympy import *
var('y')
x=10
d=factorint(x)
print(d)
for k, v in d.items():
    y=y+str(k)+'^' +str(v)
print(y)

# {2: 1, 5: 1}
# Traceback (most recent call last):
#   File "C:/xxx/.PyCharmCE2018.2/config/scratches/soinsuu.py", line 9, in <module>
#     y=y+str(k)+'^' +str(v)
# TypeError: unsupported operand type(s) for +: 'Symbol' and 'str'
#
# Process finished with exit code 1

我要

10=2^1+5^1
10=2**1+5**1

2 个答案:

答案 0 :(得分:1)

var('y')等效于y = symbols('y'),因此y是一个符号。然后执行y+str(k),添加一个符号和一个字符串。那是类型错误。

y的类型应该是字符串。并且您希望该字符串以10=开头,因此使用以下代码对其进行初始化:

from sympy import *
x = 10
y = str(x) + '=' 
d = factorint(x)
print(d)
for k, v in d.items():
    y = y + str(k)+'^' +str(v)
print(y)

也就是说,您缺少算术运算...它应该是*,而不是+。 10肯定等于2和5之和。

此外,Python为此使用了join字符串方法。用它代替循环:

from sympy import *
x = 10
d = factorint(x)
y = str(x) + '=' + '*'.join([str(k)+'^' +str(v) for k, v in d.items()])
print(y)

答案 1 :(得分:0)

def Myfactorint(x):
    return '+'.join([str(k)+'^' +str(v) for k, v in factorint(x).items()])
from sympy import *
x=10
print(x,'=',  factorint(x))
print(x,'=',Myfactorint(x))
# 10 = {2: 1, 5: 1}
# 10 = 2^1+5^1