Python解析 算數表達式求值 棧的使用


使用Python實現一種算數表達式求值的算法,模擬這種使用棧的方式,這是由E.W.Dijkstra在20世紀60年代發明的一種非常簡單的算法。代碼模擬僅僅表現一種編程思想,代碼的邏輯並不完全:

if __name__ == "__main__":
    cal_str = input("請輸入算數表達式(e.g.(((1+2)*(3+5))+2), 只適合簡單的算數表達式):")
    num_stack = []
    symbol_stack = []
    for chr in cal_str:
        #print(chr)
        if chr == "(":
            continue
        elif chr == "" or chr == "\t" or chr == "\n":
            continue
        elif chr == "+":
            symbol_stack.append(chr)
        elif chr == "-":
            symbol_stack.append(chr)
        elif chr == "*":
            symbol_stack.append(chr)
        elif chr == "/":
            symbol_stack.append(chr)
        elif chr == "sqrt":
            symbol_stack.append(chr)
        elif chr == ")":
            total_num = num_stack.pop()
            now_symbol = symbol_stack.pop()
            if now_symbol == "+":
                total_num += num_stack.pop()
            if now_symbol == "-":
                total_num -= num_stack.pop()
            if now_symbol == "*":
                total_num *= num_stack.pop()
            if now_symbol == "/":
                total_num /= num_stack.pop()
            num_stack.append(total_num)
        else:
            num_stack.append(int(chr))
    print(num_stack.pop())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM