Python 必要时在字符串中插入乘法运算符

Python 必要时在字符串中插入乘法运算符,python,string,Python,String,作为我正在从事的一个项目的一部分,我想重写字符串,以便: 当数字和字母不存在时,乘法应该放在它们之间 这个方程式应该等于零 如果,输入:2x+5ydh=4然后输出:2*x+5*ydh-4 如果,输入:x*3df+d5jk=-12然后输出:x*3*df+d*5*jk+12 我正在考虑分别搜索数字和字母的位置,然后在修复乘法之前查看它们是否彼此跟随,但这种pythonic方法是否足够?为什么不执行以下代码片段?不必遍历和搜索每个数字或字母的位置,只需在一个循环中执行所有操作,这样效率更高。基本上,我

作为我正在从事的一个项目的一部分,我想重写字符串,以便:

  • 当数字和字母不存在时,乘法应该放在它们之间

  • 这个方程式应该等于零

  • 如果,输入:
    2x+5ydh=4
    然后输出:
    2*x+5*ydh-4

    如果,输入:
    x*3df+d5jk=-12
    然后输出:
    x*3*df+d*5*jk+12


    我正在考虑分别搜索数字和字母的位置,然后在修复乘法之前查看它们是否彼此跟随,但这种pythonic方法是否足够?

    为什么不执行以下代码片段?不必遍历和搜索每个数字或字母的位置,只需在一个循环中执行所有操作,这样效率更高。基本上,我们一个字符一个字符地遍历字符串。如果一个数字跟在一个字母后面,反之亦然,那么我们加上一个“*”。否则,请继续搜索

    然后,要做“=”部分,只需将右侧的否定赋值给左侧。这部分是一个临时的(简单的)修复,但是如果您想要一个更简单的修复,那么您必须对右侧进行一些合法的解析和计算来否定它

    def convert(inp: str):
        # Edge case check
        if len(inp) == 0: return inp
    
        # Go through the string looking for where to place '*'s
        # Add the first character
        tmp = [inp[0]]
        for i in range(1, len(inp)):
            # If letter followed by digit or the reverse, then add a '*'
            if (inp[i].isalpha() and inp[i - 1].isdigit()) or (inp[i].isdigit() and inp[i - 1].isalpha()):
                tmp.append('*')
            # Now add the current character
            tmp.append(inp[i])
        # Convert the resulting list back to a string
        ans = ''.join(tmp)
    
        # Now if the equal sign is present, split the result 
        # and negate the right hand side
        if '=' in ans:
            left, right = ans.split('=', 1)
            ans = '{}-({})'.format(left, right)
    
        # Return the answer
        return ans
    
    print(convert('2x+5ydh=4'))
    print(convert('x*3df + d5jk = -12'))
    
    试试这个:

    a = "2x+5ydh=4"
    b = "x*3df + d5jk = -12"
    def format_equation(inp_str):
        lst = str("".join([c + "*" if (c.isnumeric() and d.isalpha()) else (c+"*" if (c.isalpha() and d.isnumeric()) else c) for c,d in zip(inp_str,inp_str[1:])]) + inp_str[-1]).split("=")
        lhs = lst[0]
        rhs = "+" + str(abs(int(lst[1]))) if int(lst[1]) <0 else "-" + str(lst[1])
        return lhs + rhs
    format_equation(a)    # 2*x+5*ydh-4
    format_equation(b)    # x*3*df + d*5*jk +12
    
    a=“2x+5ydh=4”
    b=“x*3df+d5jk=-12”
    def格式_公式(inp_str):
    lst=str(“.”join([c+“*”if(c.isnumeric()和d.isalpha())else(c+“*”if(c.isalpha()和d.isnumeric())else c)for c,d in-zip(inp_str,inp_str[1:])+inp_str split(“=”)
    lhs=lst[0]
    
    rhs=“+”+str(abs(int(lst[1]))如果int(lst[1]),到目前为止您尝试了什么?给我们看一些代码。请提供一个很好的解决方案,但是每当字符串中缺少“=”时就会出现错误,我会修复它。很好的一个,修复*操作符的部分按预期工作,但是“=”的部分是一个快速修复,正如您所说的,因为它只会否定另一面。我将从那里接过去。