首先我们做一个硬核的设计:
然后丢入python代码:
class mathss:
def __init__(self,string):
import queue
self.string=string+"#"
self.number=[i for i in ".0123456789"]
self.charr=[['#'],['+','-'],['*','/'],['('],[')']]
self.KUO=0
self.queue1=queue.LifoQueue()
self.queue2=queue.LifoQueue()
self.all()
def get_string(self):
k=1
u=0
while self.string[u:u+1] in self.number:
u+=1
if u==0:
u=1
k=2
litter=self.string[:u]
self.string=self.string[u:]
return litter,k
def get_list(self,get_word):
hh=[]
hh.append(get_word[0])
if get_word[0] in self.charr[0]:hh.append(0)
if get_word[0] in self.charr[1]: hh.append(1+self.KUO)
if get_word[0] in self.charr[2]: hh.append(2+self.KUO)
if get_word[0] in self.charr[3]:self.KUO=self.KUO+10;hh.append(self.KUO)
if get_word[0] in self.charr[4]: hh.append(self.KUO);self.KUO=self.KUO-10;
return hh
def A(self):
yy=['#',0]
self.queue2.put(yy)
def B(self):
get_word=self.get_string()
print(get_word)
if get_word[1]==1:
self.queue1.put(float(get_word[0]))
if get_word[1]==2:
self.C(get_word)
def C(self,get_word):
newcharlist=self.get_list(get_word)
oldcharlisr=self.queue2.get()
if newcharlist[1]>oldcharlisr[1]:
self.queue2.put(oldcharlisr)
self.queue2.put(newcharlist)
else:
if newcharlist[0]=='#' and oldcharlisr[0]=='#':
pass
elif newcharlist[0]==')' and oldcharlisr[0]=='(':
pass
else:
if get_word[0] == '(':
self.KUO = self.KUO - 10;
if get_word[0] == ')':
self.KUO = self.KUO + 10;
self.string=get_word[0]+self.string
num2=self.queue1.get()
num1=self.queue1.get()
if oldcharlisr[0]=='+':self.queue1.put(num1+num2)
if oldcharlisr[0] == '-': self.queue1.put(num1 - num2)
if oldcharlisr[0] == '*': self.queue1.put(num1*num2)
if oldcharlisr[0] == '/': self.queue1.put(num1 / num2)
numm=self.queue1.get()
print(numm)
self.queue1.put(numm)
def all(self):
self.A()
while not self.queue2.empty():
self.B()
print("\n》》》结果为:",self.queue1.get())
y=mathss("((%s/%s)+%s*%s)+((1/3+6)/3)*(2.9)"%(10.1,3.1,3.1415,5536,))
y=mathss("1*2*3*4*5/6/7/8/9")
结果如下:
('(', 2)
('(', 2)
('10.1', 1)
('/', 2)
('3.1', 1)
(')', 2)
3.258064516129032
(')', 2)
('+', 2)
('3.1415', 1)
('*', 2)
('5536', 1)
(')', 2)
17391.344
(')', 2)
17394.60206451613
(')', 2)
('+', 2)
('(', 2)
('(', 2)
('1', 1)
('/', 2)
('3', 1)
('+', 2)
0.3333333333333333
('+', 2)
('6', 1)
(')', 2)
6.333333333333333
(')', 2)
('/', 2)
('3', 1)
(')', 2)
2.111111111111111
(')', 2)
('*', 2)
('(', 2)
('2.9', 1)
(')', 2)
('#', 2)
6.122222222222222
('#', 2)
17400.72428673835
('#', 2)
》》》结果为: 17400.72428673835
('1', 1)
('*', 2)
('2', 1)
('*', 2)
2.0
('*', 2)
('3', 1)
('*', 2)
6.0
('*', 2)
('4', 1)
('*', 2)
24.0
('*', 2)
('5', 1)
('/', 2)
120.0
('/', 2)
('6', 1)
('/', 2)
20.0
('/', 2)
('7', 1)
('/', 2)
2.857142857142857
('/', 2)
('8', 1)
('/', 2)
0.35714285714285715
('/', 2)
('9', 1)
('#', 2)
0.03968253968253968
('#', 2)
》》》结果为: 0.03968253968253968