问题是
onput = '2x**4 - 2x**3 - x**2 + 3x - 4' #some random 5-term polynomial
factors = [1, -1, 2, -2, 5]
for i in range(len(factors)):
subtitute = '({})'.format(factors[i])
onput = onput.replace('x', subtitute) #replaces 'x'
print(onput)
显然打印:
>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4
>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4
>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4
>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4
>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4
代替:
>>> 2(1)**4 - 2(1)**3 - (1)**2 + 3(1) - 4
>>> 2(-1)**4 - 2(-1)**3 - (-1)**2 + 3(-1) - 4
>>> 2(2)**4 - 2(2)**3 - (2)**2 + 3(2) - 4
>>> 2(-2)**4 - 2(-2)**3 - (-2)**2 + 3(-2) - 4
>>> 2(5)**4 - 2(5)**3 - (5)**2 + 3(5) - 4
所以我的解决方案是:
onput = '2x**4 - 2x**3 - x**2 + 3x - 4'
factors = [1, -1, 2, -2, 5]
for i in range(len(factors)):
subtitute = '({})'.format(factors[i])
xonput = onput.replace('x', subtitute)
print(xonput)
成功打印出我想要的结果。但问题是我不太明白为什么使用相同的列表来调用相同的列表会导致这个 bug 将因子列表的第一项保留为每个替换,而不是将它替换为每个列表的每个项目替换。
答案 0 :(得分:2)
问题在于,在第一个循环中,修改了 onput
以替换所有 x
占位符,因此,在下一次迭代中,没有更多的 x
替换onput
。
通过使用不同的变量 (xonput
),可以避免覆盖模板字符串。