我试图用括号()
来评估算术表达式。
例如)评估
(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)
这适用于整数。但对于浮动,这成为一个问题。我该怎么做才能分离浮点数?
答案 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