我有下一个在Python中解析表达式的算法:
def parse(strinput):
for operator in ["+-", "*/"]:
depth = 0
for p in range(len(strinput) - 1, -1, -1):
if strinput[p] == ')': depth += 1
elif strinput[p] == '(': depth -= 1
elif depth==0 and strinput[p] in operator:
# strinput is a compound expression
return (strinput[p], parse(strinput[:p]), parse(strinput[p+1:]))
strinput = strinput.strip()
if strinput[0] == '(':
# strinput is a parenthesized expression?
return parse(strinput[1:-1])
# strinput is an atom!
return strinput
(可在此处找到:http://news.ycombinator.com/item?id=284842)
我很难理解它,因为我发现Python文档对这种情况没有太大帮助。有人能告诉我for operator in ["+-", "*/"]:
是什么意思吗?
我知道它的结构类似于每个字符串变量,它是由这两个元素组成的数组中的运算符,但为什么它是这样写的[“+-,*/”]?Python如何将其分开?在第一次迭代中,运算符是“+-”?在
任何帮助都意义重大。谢谢
您是正确的;}将是第二次通过循环。在
for operator in ["+-", "*/"]:
表示运算符将是"+-"
第一次通过,而{请注意,稍后它会检查},第二次通过时}时,此表达式才为真。在
strinput[p] in operator
。Python将字符串视为一个字符列表,因此只有在第一次通过时strinput[p]
等于"+"
或{"*"
或{(他们这样做的原因是为了操作顺序-}与
"+"
和{"*"
和"/"
相等但优先级更低)相关问题 更多 >
编程相关推荐