Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python循环不';t更新变量?_Python_Loops - Fatal编程技术网

Python循环不';t更新变量?

Python循环不';t更新变量?,python,loops,Python,Loops,我试图做一个循环,将一个函数(如f(x)=(2x+3)(2x-3))转换成更好的编辑格式,只需在数字前加一个“+”(它将变成f(x)=(+2x+3)(+2x-3))。问题是,在循环中,在字符串的中间插入一个新字符之后,字符串不更新,所以当循环继续并且我试图访问函数字符串的某个索引时,字符不正确。 def rewriteFunction(function): for i, c in enumerate(function): newFunction += c

我试图做一个循环,将一个函数(如f(x)=(2x+3)(2x-3))转换成更好的编辑格式,只需在数字前加一个“+”(它将变成f(x)=(+2x+3)(+2x-3))。问题是,在循环中,在字符串的中间插入一个新字符之后,字符串不更新,所以当循环继续并且我试图访问函数字符串的某个索引时,字符不正确。
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:]
如果可能的话,你能回答我发送准确的(更正的)代码,而不修改太多,当然如果这是正确的方法。提前谢谢

  • 在一行中,您将更新的数据存储在变量
    newFunction
    中,但在另一行中,您将更新存储回
    function
    。为了保持一致性,我们永远不要更改
    函数
    ,而是将所有更新应用到
    新函数

  • 您从不初始化
    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)'
  • 在一行中,您将更新的数据存储在变量
    newFunction
    中,但在另一行中,您将更新存储回
    function
    。为了保持一致性,我们永远不要更改
    函数
    ,而是将所有更新应用到
    新函数

  • 您从不初始化
    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)'

如果您的解决方案不一定要使用循环,您可以尝试简化:

>>> import re
>>> s = 'f(x)=(2x+3)(2x-3))'
>>> re.sub(r'\b(?<![+-])(\d+)', r'+\1', s)
'f(x)=(+2x+3)(+2x-3))'
>>重新导入
>>>s='f(x)=(2x+3)(2x-3))'

>>>re.sub(r'\b(?如果您的解决方案不一定要使用循环,您可以尝试简化:

>>> import re
>>> s = 'f(x)=(2x+3)(2x-3))'
>>> re.sub(r'\b(?<![+-])(\d+)', r'+\1', s)
'f(x)=(+2x+3)(+2x-3))'
>>重新导入
>>>s='f(x)=(2x+3)(2x-3))'

>>>re.sub(r'\b(?必须返回函数。不会从调用方的视图更新参数,因为字符串是不可变的。是,并且
enumerate()
操作原始的
函数
,从未看到UDPATE。如果它看到了更新,也将是错误的。在对其进行迭代时不要更改对象。你的意思是像递归函数一样?这将更简单地用正则表达式解决:
re.sub(r'(?必须返回函数。不会从调用方视图更新参数,因为字符串是不可变的。是,和
enumerate()
操作原始的
函数
,从未看到UDPATE。如果它看到了更新,也将是错误的。在对其进行迭代时不要更改对象。你的意思是像递归函数一样?这将更简单地用正则表达式解决:
re.sub(r'(?在OP算法中,两位数系数是一个问题。
f(x)=33x
=>
f(x)=+3+3x
。非常感谢!!最后一个问题:如何将“函数”与“新函数”相等(注意,我做了一点小改动,将函数和新函数定义为列表),我的意思是,你能等于两个列表吗?使用OP的算法,两位数的系数是个问题。
f(x)=33x
=>
f(x)=+3+3x
。非常感谢!!最后一个问题:我如何将“函数”等于“新函数”(注意,我做了一点小小的改变,将函数和新函数定义为列表)我的意思是,你能把两张名单相等吗?是的,有一个错误。谢谢!是的,有一个错误。谢谢!