我需要一种方法,该方法可以使字符串如下所示:
"( * 1 2 ( - 4 3 ) )" -> ["*", 1, 2, ["-", 4, 3]]
有没有简单的方法可以解决此问题?
您没有可以使用的简单内置呼叫或单线技巧,但是仍然可以完全控制。
首先,您需要标记输入。粗略地说,这意味着分离成单位,比如(
,*
和123
。如果保证输入是空格分隔的,则可以使用split
方法,但是如果需要处理类似的输入(* (+ 1 2) 3)
,则可能会有点困难。
>>> "( * 1 2 ( - 4 3 ) )".split()
['(', '*', '1', '2', '(', '-', '4', '3', ')', ')']
现在您已经有了令牌序列,我们可以编写一个递归解析器。一次遍历令牌。
int
或拨打float
它并返回结果。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句