0

私の仕事は、完全に括弧で囲まれた中置式を変換することです。例

(((54+56)+(4+73))+(9+7))

ポストフィックスに。次に接尾辞を評価します。式はユーザーから入力されます。既に作成されている Stack というクラスを使用する必要があります。変更してはいけません:

class Stack:
    def __init__(self):
        self.theStack=[]

    def top(self):
        if self.isEmpty():
            return "Empty Stack"
        else:
            return self.theStack[-1]

    def isEmpty(self):
        return len(self.theStack)==0

    def push(self,item):
        self.theStack.append(item)

    def pop(self):
        if not self.isEmpty():
            temp=self.theStack[-1]
            del(self.theStack[-1])
            return temp
        else:
            return "Empty Stack"

私が抱えている最初の問題は、スタックを使用しているときにユーザーがたとえば 54 を入力すると、5 と 4 が 2 つの異なる要素になることです。どうすればそれを1つに変えることができますか?

これまでのところ、後置を評価するコードは次のとおりです。

OPERATOR=["+","-","*", "/"]

def evaluatePostfix(Postfix):
    eStack=Stack()
    for n in Postfix:
        if n not in OPERATOR and n!="(" and n!=")":
            eStack.push(n)
        if n in OPERATOR:
            math=eStack.pop()+n+eStack.pop()
            eval(math)

問題が最後から 2 番目の行であることはわかっていますが、修正方法がわかりません

4

2 に答える 2

0

あなたが尋ねているいくつかの質問があります(後置式を評価するという最終的な目標に導く限り、あなたの答えは完全ではありません)が、あなたが尋ねた質問に答えさせてください:

「私が抱えている最初の問題は、スタックを使用しているときにユーザーがたとえば 54 を入力すると、5 と 4 は 2 つの異なる要素になることです。どうすれば 1 つに変えることができますか?」

一度に 1 文字ずつ入力をスキャンすることにコミットしている場合、最も簡単な方法は一時変数を使用することです。Python でこれを行うための簡単で汚い方法を次に示します。

infix = "54 + 490"
postfix = ""
a_number = None
OPERATOR = ["+", "-", "*", "/"]

for n in infix:
    if n not in OPERATOR and n != "(" and n != ")":
        if a_number is None:
            a_number = n
        else:
            a_number = a_number + n

    if n is ")" or n in OPERATOR:
         if a_number is not None:
             postfix += a_number
             a_number = None


if a_number is not None:
    postfix += a_number
    a_number = None

print postfix
于 2013-05-07T23:52:53.933 に答える