Python循环没有更新变量?

时间:2017-02-02 20:09:49

标签: python loops

我尝试制作一个循环,将函数(如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:]

如果可能的话,您能否通过发送确切的(更正的)代码来回答我,而不会过多地修改它,当然,如果这是正确的方法。在此先感谢!!

2 个答案:

答案 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))'

随时询问有关解决方案的任何问题。