Python-五則運算


求該題程式碼
且需要使用stack

計算五則運算式的結果,包含加、減、乘、除、餘

輸入說明 :

輸入一個字串,其中包含運算元及運算子,為了方便讀取,所有的運算子及運算元均以空格區隔。
運算元皆為正整數
運算子則包含 + - * / %
運算時請注意”先乘除(餘)後加減”的計算規則

輸出說明 :

輸出結果。為了避免小數點誤差,所有的運算過程都不會產生小數點,可以放心使用整數進行運算

注意 :
此題為練習 stack 的應用,請勿使用 eval 函式來進行解題。
若未使用 stack 作答作業,將不予計分。

Sample Input:
3 + 5 - 7 - 4

Sample Output:
-3

Sample Input:
3 + 6 / 2 + 9 / 3 - 4

Sample Output:
5

Sample Input:
3 + 6 / 2 * 3 - 4 % 3

Sample Output:
11


img


class stack:
    def __init__(self):#初始化
        self.s=[]
    def pull(self,n):#入栈
        self.s.append(n)
    def out(self):#出栈
        if len(self.s)>0:
            t=self.s[-1]
            del(self.s[-1])
            return t
        else:
            return None
    def l(self):#返回栈内长度
        return len(self.s)

s1=stack()#栈1,存储读入运算式
s2=stack()#栈2,辅助运算
s=input("").split(' ')#读取输入并入栈
for i in range(len(s)):
    s1.pull(s[len(s)-i-1])
while 1:#第一次轮栈操作
    t=s1.out()
    if t==r'/' or t==r'*' or t==r'%':
        t1=int(s1.out())
        t2=int(s2.out())
        if t==r'/':
            t3=t2/t1
        if t==r'*':
            t3=t2*t1
        if t==r'%':
            t3=t2%t1
        s2.pull(t3)
    else:
        s2.pull(t)
    if s1.l()==0:
        break
while s2.l()>0:
    t=s2.out()
    s1.pull(t)
while s1.l()>1:
    t1=int(s1.out())
    t2=s1.out()
    t3=int(s1.out())
    if t2==r'+':
        t=t3+t1
    if t2==r'-':
        t=t1-t3
    s1.pull(t)
print(s1.out())
    
    





能发中文简体吗?

出练习题的老师,用心良苦啊……
1、将现有的中缀表达式转换为后缀表达式(逆波兰式)。
2、将栈中转换好的后缀表达式计算出来。
以上即思路,加油,少年

这个采用栈这个数据结构即可实现,不需要括号的匹配,还更简单,定义四种运算然后一个个循环计算即可