将未空格的数字与字符串分开

时间:2013-04-11 06:24:34

标签: python math floating-point

我试图用括号()来评估算术表达式。

例如)评估

(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)

这适用于整数。但对于浮动,这成为一个问题。我该怎么做才能分离浮点数?

2 个答案:

答案 0 :(得分:3)

我有点不清楚你的代码试图实现什么,所以你可能有更好的选择,但是用一种简洁的方法将字符串中的内容解析为int并将字符串浮动到float是使用ast模块:

>>> import ast
>>> ast.literal_eval('1')
1
>>> ast.literal_eval('1.0')
1.0
>>> ast.literal_eval('1e10')
10000000000.0

答案 1 :(得分:1)

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

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