Python循环不';t更新变量?
我试图做一个循环,将一个函数(如f(x)=(2x+3)(2x-3))转换成更好的编辑格式,只需在数字前加一个“+”(它将变成f(x)=(+2x+3)(+2x-3))。问题是,在循环中,在字符串的中间插入一个新字符之后,字符串不更新,所以当循环继续并且我试图访问函数字符串的某个索引时,字符不正确。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
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
。非常感谢!!最后一个问题:我如何将“函数”等于“新函数”(注意,我做了一点小小的改变,将函数和新函数定义为列表)我的意思是,你能把两张名单相等吗?是的,有一个错误。谢谢!是的,有一个错误。谢谢!