求該題程式碼
且需要使用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
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、将栈中转换好的后缀表达式计算出来。
以上即思路,加油,少年
这个采用栈这个数据结构即可实现,不需要括号的匹配,还更简单,定义四种运算然后一个个循环计算即可