0

我正在尝试用括号评估算术表达式()

例如)评估

(1.6*(2.7+(4.1/3.2)*3.9))    

我需要将数字和运算符分开,我试过这个:

def process(a,s):
    b=['1','2','3','4','5','6','7','8','9','0']
    if a in b:
          s=s*10+int(a)
          return s
    elif a==')':
          #do stuff
          return 0
    else:
          #do stuff
          return 0
a=raw_input()
s=0
for i in a:
    s=process(i,s)

这适用于整数。但是对于浮动,这成为一个问题。我能做些什么来分隔浮点数?

4

2 回答 2

3

我有点不清楚您的代码试图实现什么,因此您可能有更好的选择,但是将字符串中的整数解析为字符串int并将字符串中的浮点数解析为的一种巧妙方法float是使用ast模块:

>>> import ast
>>> ast.literal_eval('1')
1
>>> ast.literal_eval('1.0')
1.0
>>> ast.literal_eval('1e10')
10000000000.0
于 2013-04-11T06:32:08.693 回答
1

简化假设您还不想处理()s,以下代码有效:

In [62]: def process(s):
    answer = 0
    depth = 0
    decimal = False
    for char in s:
        if char == '.':
            decimal = True
            continue
        else:
            if decimal:
                depth += 1
                answer += int(char)/10.0**depth
            else:
                answer *= 10
                answer += int(char)
    return answer

In [63]: process('25.082')
Out[63]: 25.081999999999997

In [64]: process('25.0')
Out[64]: 25.0

In [65]: process('25')
Out[65]: 25
于 2013-04-11T06:33:29.883 回答