2017-03-11 18 views
0
は、だからここに私のコードです

Pythonの中置は、評価はAttributeErrorを投稿-修正する: 'リスト' オブジェクトには、属性を持たない 'スプリット'

from StackClass import Stack 


def postfixEval(postfix): 
    os = Stack() 


tokenList = postfix.split() 

for token in tokenList: 
    if token in "": 
     os.push(int(token)) 
    else: 
     op2 = os.pop() 
     op1 = os.pop() 
     result = doMath(token,op1,op2) 
     os.push(result) 
return os.pop() 

def doMath(op, op1, op2): 
    if op == "*": 
     return op1 * op2 
    elif op == "/": 
    return op1/op2 
elif op == "+": 
    return op1 + op2 
else: 
    return op1 - op2 



def pres(p): 
    if p is '(': 
     return 0 
    elif p is '+' or '-': 
     return 1 
    elif p is '*' or '/': 
     return 2 
    else: 
     return 99 

def read(p): 
    if p is '(': 
     return left 
    elif p is ')': 
     return right 
    elif p is '+' or p is '-' or p is '*' or p is '%' or p is '/': 
     return operator 
    elif p is ' ': 
     return empty  
    else : 
     return operand       




def infixtopostfix(infixexp): 

    for i in infixexp : 
     type = read(i) 
     if type is left : 
      outlst.append(i) 
     elif type is right : 
      next = outlst.pop() 
      while next is not '(': 
       postfix.append(next) 
       next = outlst.pop() 
     elif type is operand: 
      postfix.append(i) 
    elif type is operator: 
     p = pres(i) 
     while len(outlst) is not 0 and p <= pres(outlst[-1]) : 
      postfix.append(outlst.pop()) 
     outlst.append(i) 
    elif type is empty: 
     continue 

while len(outlst) > 0 : 
    postfix.append(outlst.pop()) 


print "It's postfix notation is ",''.join(postfix) 

MAIN PROGRAM

真しばらく:

postfix = [] 
outlst = [] 
operator = -10 
operand = -20 
left = -30 
right = -40 
empty = -50 


infixexp = raw_input("\nEnter the infix notation : ") 
infixtopostfix(infixexp) 
print(postfixEval(postfix)) 



choice = raw_input("\nDo you want to continue?<1-Yes/0-No>: ") 

if choice == '0': 
    break 

このエラーが表示されます。AttributeError: 'list'オブジェクトに 'split'属性がありません。私はそれがどこから来るのか分からない、私は結合を使用してリストをストリングしようとしたが効果がない。私はこれを投稿する必要があるように感じました、私は助けが必要ですまたスタック実装と評価でこのエラーでも問題を抱えている人のために。

ところで、infixtopostfix(infixexp)の部分では、どうやって結果が空白になるか考えていますか?例えば、13 + 5 *の代わりに1 3 + 5 *とする。私はこれをどのようにして行うのですか?私は今それを考え出している。私はここで私自身の質問に答えます。私が問題を解決すれば。しかし、時間の効率化のために、誰かがこれにぶつかり、過去にこの問題を解決したかもしれません。助けてください:)ありがとう! postfixEval tokenList =後置の印刷でファイル "practice.py"、ライン112、(postfixEval(接尾辞))ファイル "practice.py"、8行目、:

TRACEBACK

トレースバック(最新の呼び出しの最後) .split()AttributeError: 'list'オブジェクトに 'split'属性がありません

+0

完全なスタックトレースを投稿してください – e4c5

+0

フルトレースバックを表示してください –

+0

リストオブジェクトには分割がありません。 'import pdb;を追加してください。 inflixxxxxの型がわからない場合は、pdb.set_trace()を呼び出してください。 – Shuo

答えて

0

postfix = []postfix.append(outlst.pop()) のコードでは、postfixがリストであることを示しています。リストにはsplit()のようなメソッドはなく、むしろstrオブジェクトに適用できます。

+0

その前にpostfix strを作成する必要がありますか?このような? str(後置) tokenList = postfix.split() 同じエラーが発生します – Rekt

+0

ここでsplit()の目的は何ですか? split()はリストを返します。すでにそのリストがあります。ではない? –

0

スペーキングの問題への回答。 raw_inputの後に挿入式を分割するだけです。そうすれば、例100は1つの文字列として認識されます。その結果、私は私の投稿に含まれているものになるでしょう。あなたは知らなかった。

関連する問題