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

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 に答える