2016-04-01 11 views
0

"(19 +((91 -96)-13))"などの文字列から式を評価する必要がありますが、私はアルゴリズムを自分で作る必要があります。 eval()などを使用します。Stringからの数式を評価する - Python

私はこのコードでたくさん試みられてきたが、それは私に負の数に問題を与える:

while counter < 1: 
    chunks = [] 
    counter2 = 1 

    for character in operation: 
     if character.isdigit(): 
      if chunks[-1].isdigit(): # If the last chunk is already a number 
       chunks[-1] += character # Add onto that number 
      else: 
       chunks.append(character) # Start a new number chunk 
     elif character in '+-/*()': 
      chunks.append(character) # This doesn't account for `1 ++ 2`. 

    for e in reversed(chunks): 
     if e == '(': 
      counter2 = len(chunks) - counter2 
      break 
     else: 
      counter2 = counter2 + 1 

    if chunks[counter2+2] == '+': 
     result2 = int (chunks[counter2+1]) + int (chunks[counter2+3]) 
    elif chunks[counter2+2] == '-': 
     result2 = int (chunks[counter2+1]) - int (chunks[counter2+3]) 
    elif chunks[counter2+2] == '*': 
     result2 = int (chunks[counter2+1]) * int (chunks[counter2+3]) 
    elif chunks[counter2+2] == '/': 
     result2 = int (chunks[counter2+1])/int (chunks[counter2+3]) 


    chunks[counter2] = '' 
    chunks[counter2 + 1] = '' 
    chunks[counter2 + 2] = str (result2) 
    chunks[counter2 + 3] = '' 
    chunks[counter2 + 4] = '' 

    operation = ''.join(chunks) 

は、私はちょうどチェックする必要があるとして、私はそれを更新しています、while条件に注意を払ってはいけません

+0

[PLY](http://www.dabeaz.com/ply/ply)のような適切なレキシング解析ツールを使用すると、 .html)またはLex/Yaccでさえ、あなたの人生をもっと楽にしてくれるでしょう。 –

+0

事は私ができない、私はアルゴリズム全体を作る必要があります。 – Wrong

+0

負の数値にはどのような問題がありますか? –

答えて

0

あなた自身でコードをさらにデバッグしようとする必要があります。あなたが持っている問題は、int変換が " - "ではなく "-5"で行われていることです。シーケンスの中で " - "と整数を組み合わせ、それをintに変換して使用する必要があります。 temp = str(チャンク[カウンタ2 + 3])+ str(チャンク[カウンタ2 + 4])

+0

何とか今は固定されていますそれは奇妙な結果を与える – Wrong