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]),到目前为止您尝试了什么?给我们看一些代码。请提供一个很好的解决方案,但是每当字符串中缺少“=”时就会出现错误,我会修复它。很好的一个,修复*操作符的部分按预期工作,但是“=”的部分是一个快速修复,正如您所说的,因为它只会否定另一面。我将从那里接过去。