我尝试制作一个循环,将函数(如f(x)=(2x + 3)(2x-3))转换为更好的格式进行编辑,只需添加一个' +'在数字之前(它将变为f(x)=( + 2x + 3)( + 2x-3))。问题是在循环中,在字符串中间插入一个新的 char 之后,字符串不会更新,所以当循环继续并且我尝试访问某个字符串时函数字符串的索引,字符是不正确的。
def rewriteFunction(function):
for i, c in enumerate(function):
newFunction += c
if(str(c).isdigit()):
if not(i == 0):
if not(Sign.isSign(function[i - 1])):
function = function[:i] + "+" + function[i:]
如果可能的话,您能否通过发送确切的(更正的)代码来回答我,而不会过多地修改它,当然,如果这是正确的方法。在此先感谢!!
答案 0 :(得分:1)
在一行中,您将更新的数据存储在变量newFunction
中,但在另一行中,您将更新存储回function
。为了保持一致性,我们永远不要更改function
并将所有更新应用于newFunction
。
您永远不会初始化newFunction
。
您从未明确地从rewriteFunction()
返回任何内容。
试试这个:
def rewriteFunction(function):
newFunction = ''
for i, c in enumerate(function):
if(str(c).isdigit()):
if not(i == 0):
if not(function[i - 1] in '+-'):
newFunction += '+'
newFunction += c
return newFunction
assert rewriteFunction('f(x)=(2x+3)(2x-3)') == 'f(x)=(+2x+3)(+2x-3)'
答案 1 :(得分:1)
如果您的解决方案不限于使用循环,您可以尝试regular expressions来简化操作:
>>> import re
>>> s = 'f(x)=(2x+3)(2x-3))'
>>> re.sub(r'\b(?<![+-])(\d+)', r'+\1', s)
'f(x)=(+2x+3)(+2x-3))'
随时询问有关解决方案的任何问题。