<p>为什么不做下面的代码片段?不用遍历和搜索每个数字或字母的位置,只需在一个循环中执行所有操作,这样效率更高。基本上,我们一个字符一个字符地遍历字符串。如果一个数字跟在一个字母后面,反之亦然,那么我们就加上一个“*”。否则,继续搜索。你知道吗</p>
<p>然后,要做“=”部分,只需将右手边的否定赋值给左手边。这部分是一个临时的(简单的)修复,但是如果您想要一个更简单的修复,您必须对右侧进行一些合法的解析和计算来否定它。你知道吗</p>
<pre><code>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'))
</code></pre>