嗨,我有一个这样的数学方程式: " 1 +((( - -C24 + -A2)^ 2)*(B2 - F4)"我在转换为前缀表示法时将其转换为嵌套元组:
lis = ('add', '1', ('multiply', ('exp', ('add', '-C24', '-A2'), '2'), ('subtract', 'B2', 'F4')))
我想将其转换为如下所示的字符串:
add(1, multiply(exp(add(-C24, -A2), 2), subtract(B2, F4)))
但是,我的输出看起来像这样,显然不正确,因为我缺少一些逗号和括号:
add(1, multiply(exp(add(-C24, -A2)2)subtract(B2, F4)
我不确定我是否编程循环以正确迭代嵌套元组以将其转换为字符串:
def solve(lis):
count1 = 0;
for element in lis:
if isinstance(element, collections.Iterable) and not isinstance(element,str):
for x in solve(element):
yield x
else:
if count1 == 0:
str1 = str(element)
str1 +="("
yield str1
elif count1 == 2:
str1 = str(element)
str1 +=")"
yield str1
else:
str1 = str(element)
str1 += ", "
yield str1
#yield str(element)
print("element =", element, "count = ", count1)
count1 = count1+1
print(''.join(list(solve(lis))))
非常感谢任何帮助,弄清楚我在哪里搞乱生成正确的字符串。
答案 0 :(得分:0)
问题在于,当你到达一个可迭代的元素时,你就不会把","或")"在它之后。这会修复它(注意在你的内部for循环中用粗体字写的if-else语句):
def solve(lis):
count1 = 0;
for element in lis:
if isinstance(element, collections.Iterable) and not isinstance(element,str):
for x in solve(element):
yield x
if count1 == 2:
yield ")"
else:
yield ", "
else:
if count1 == 0:
str1 = str(element)
str1 +="("
yield str1
elif count1 == 2:
str1 = str(element)
str1 +=")"
yield str1
else:
str1 = str(element)
str1 += ", "
yield str1
#yield str(element)
print("element =", element, "count = ", count1)
count1 = count1+1
现在这将打印您想要的内容:
print(''.join(list(solve(lis))))
给你:
add(1, multiply(exp(add(-C24, -A2), 2), subtract(B2, F4)))
根据需要。