我必须编写一个接受字符串的函数,并将返回带有添加"asteriks“或"*”符号的字符串来表示乘法。
众所周知,4(3)是另一种表示乘法的方法,4*3或(4)(3)或4*(3)或4*(3)等等。我的代码需要通过在4和3之间添加一个asterik来解决这个问题,因为当乘法用括号显示而没有乘法运算符“*”时。
下面是一些例子:
我不太清楚如何做到这一点,我正在考虑如何找到左括号,然后简单地在那个位置添加一个"*“,但这是行不通的,因此我的第三个示例的开头将输出”* (-9)“,这是我不想要的,或者我的第四个输出"4^*(3)”的示例。对于如何解决这个问题,有什么想法吗?谢谢。
下面是我尝试过的一些东西,很明显它不起作用:
while index < len(stringtobeconverted)
parenthesis = stringtobeconverted[index]
if parenthesis == "(":
stringtobeconverted[index-1] = "*"发布于 2020-03-25 23:57:17
我会分享我的。
def insertAsteriks(string):
lstring = list(string)
c = False
for i in range(1, len(lstring)):
if c:
c = False
pass
elif lstring[i] == '(' and (lstring[i - 1] == ')' or lstring[i - 1].isdigit() or lstring[i - 1].isalpha() or (lstring[i - 1] == ' ' and not lstring[i - 2] in "*^-+/")):
lstring.insert(i, '*')
c = True
return ''.join(lstring)让我们检查一下您的输入。
print(insertAsteriks("4(3)"))
print(insertAsteriks("(4)(3)"))
print(insertAsteriks("4*2 + 9 -4(-3)"))
print(insertAsteriks("(-9)(-2) (4)"))
print(insertAsteriks("(4)^(-3)"))
print(insertAsteriks("ABC(DEF)"))
print(insertAsteriks("g(d)(f)"))
print(insertAsteriks("(g)-(d)"))产出如下:
4*(3)
(4)*(3)
4*2 + 9 -4*(-3)
(-9)*(-2) (4)
(4)^(-3)
ABC*(DEF)
g*(d)*(f)
(g)-(d)
[Finished in 0.0s]发布于 2020-03-25 23:40:29
In [15]: def add_multiplies(input_string):
...: return re.sub(r'([^-+*/])\(', r'\1*(', input_string)
...:
...:
...:
In [16]: for example in examples:
...: print(f"{example} -> {add_multiplies(example)}")
...:
4(3) -> 4*(3)
(4)(3) -> (4)*(3)
4*2 + 9 -4(-3) -> 4*2 + 9 -4*(-3)
(-9)(-2) (4) -> (-9)*(-2) *(4)
4^(3) -> 4^*(3)
(4-3)(4+2) -> (4-3)*(4+2)
(Aflkdsjalkb)(g) -> (Aflkdsjalkb)*(g)
g(d)(f) -> g*(d)*(f)
(g)-(d) -> (g)-(d)发布于 2020-03-26 09:15:51
tl;dr–而不是将其视为字符串转换,您可以:
解析输入以创建抽象语法树,然后发出新字符串。
一般来说,你应该:
可以形成一棵树,如:
\* / \ 2 + / \ \* 5 / \ 3 4,其中该树中的每个节点(2、3、4、5、*和+)都是一个具有对其子对象的引用的对象。
"2(3(4)+5)"解析为抽象语法树的逻辑,该树表示它的含义。注意:字符串转换对于快速脚本编写可能更容易。
正如其他答案所示,如果您只需要一个快速脚本,那么直接字符串转换就会更容易,例如,您有一些文本只想很快地重新格式化。例如,正如@保尔·惠普的回答所演示的那样,正则表达式可以使这样的脚本编写得非常快速和容易。
也就是说,对于专业项目,您通常希望在发出新表示之前将数据解析为抽象表示。字符串转换技巧通常不会随着复杂性的增加而扩展得很好,而且除了简单的情况外,它们在功能上是有限的,而且很容易出错。
https://stackoverflow.com/questions/60858862
复制相似问题