【发布时间】:2019-02-12 18:51:08
【问题描述】:
对于
u未知变量(例如a、b、c、d)和符号+-*/,找出所有可能的长度为n的方程一个例子是 (
for u=2, n=5):(a+b)/a
我当前的代码可以创建所有可能方程的列表,但没有括号
v = ["a", "b"] #Variables
s = ["+", "-", "*", "-"] #Symbols
n = 7 #Amount of variables and symbols
a = [] #Lists combined (find possible equations from)
for i in range(n):
if i % 2 == 0:
a.append(v)
else:
a.append(s)
equations = list(itertools.product(*a))
for each in equations:
print("".join(each))
总之,我写的代码并不包含方程式的所有可能性。
例如n=5 and 2 variables,我的代码找不到(a+b)*b的可能性
使用n=7 and 4 variables,找不到`(a+b)*(c+d)
我的主要问题:我如何创建一些代码来获取每个可能的方程并找到所有可能的括号而不重复
重复示例:(a+b)*c 和 a*(b+c)
注意:这是重复的,因为由于正在测试每个可能的等式,在某些时候a+b 将变为b+c,因此*c 将变为*a
【问题讨论】:
-
这个任务需要构建它们吗?不仅算数?
-
是的,找到所有可能的方程式并将它们保存到@Iluvatar 列表中
-
您的计数似乎不一致。您的 n=3 的第一个示例是 (a+b)/a,即只计算变量,但您后面的示例同时计算变量和运算符,例如对于 n=5,你带来 (a+b)*b。 n到底是什么意思?
-
@pentadecagon n 包括变量和运算符
-
您可能想研究为每个方程构建语法树或 AST。这将解决括号问题,因为该信息存储在树的结构中。例如,
(a+b)*c将存储为类似*(+(a, b), c)的内容(其中x(y, z)表示节点x具有子节点y和z)。
标签: python python-3.x algorithm itertools