Ai
1 Star 0 Fork 0

lvzr/Four_Arithmetic_Operations for python

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Calculate.py 5.81 KB
一键复制 编辑 原始数据 按行查看 历史
lvzr 提交于 2018-03-31 11:14 +08:00 . push project
# -*- coding: utf-8 -*-
# @Time : 2018/3/26 12:36
# @Author : Lv Zhangrun
# @Site :
# @File : Calculate.py
# @Software: PyCharm
import Stack
import Fraction
class Calculator:
def __init__(self):
self.numberStack = Stack.Stack()
self.symbolStack = Stack.Stack()
self.top = ""
self.listOperators = ["+", "-", "×", "÷", "(", ")","="]
def getFraction(self, strFraction, featureSymbol):
listFraction = strFraction.split(featureSymbol)
if featureSymbol=="/":
return listFraction
else:
strTemp = listFraction[1]
listTemp = strTemp.split("/")
temp = []
temp.append(int(listFraction[0]) * int(listTemp[1]) + int(listTemp[0]))
temp.append(int(listTemp[1]))
return temp
def symbolLeftBracket(self, symbol):
return True
def symbolMultipleSign(self, symbol):
if self.top == "+" or self.top == "-":
return True
else:
return False
def symbolDivisionSign(self, symbol):
if self.top == "+" or self.top == "-":
return True
else:
return False
def symbolPlusSign(self, symbol):
return False
def symbolMinusSign(self, symbol):
return False
def symbolRightBracket(self, symbol):
return False
def symbolEqualSign(self, symbol):
return False
def comparePri(self, symbol):
switch = {
"(": self.symbolLeftBracket("("),
"×": self.symbolMultipleSign("×"),
"÷": self.symbolDivisionSign("÷"),
"+": self.symbolPlusSign("+"),
"-": self.symbolMinusSign("-"),
")": self.symbolRightBracket(")"),
"=": self.symbolEqualSign("=")
}
if self.symbolStack.isEmpty():
return True
self.top = self.symbolStack.peek()
if self.top == "(":
return True
if symbol not in switch.keys():
return True
else:
return switch[symbol]
def checkBrackets(self, expression):
stack = Stack.Stack()
b = False
for i in expression:
if i == "(":
stack.push(i)
if i == ")":
if stack.isEmpty() or stack.pop() != "(":
return False
if i == "=":
if b:
return False
b = True
if stack.isEmpty() == False:
return False
if expression[len(expression) - 1:] != "=":
return False
return True
def calculate(self, expression):
expression.strip() # 去空格
if len(expression) > 1 and expression[len(expression) - 1:] != "=":
expression = expression + "="
if self.checkBrackets(expression) == False:
print("错误:表达式有误!")
return "0"
listTemp = []
for element in expression:
if element not in self.listOperators:
listTemp.append(element)
else:
strTemp = ""
for i in listTemp:
strTemp = strTemp + str(i)
if len(strTemp) != 0:
self.numberStack.push(strTemp)
listTemp.clear()
while self.comparePri(element) == False and self.symbolStack.isEmpty() == False:
number1 = str(self.numberStack.pop())
number2 = str(self.numberStack.pop())
# print("number1:"+number1)
# print("number2:"+number2)
# fraction1 = None
# fraction2 = None
if "’" in number1:
temp1 = self.getFraction(number1, "’")
# print("temp1:"+str(temp1))
fraction1 = Fraction.Fraction(temp1[0], temp1[1])
elif "’" not in number1 and "/" in number1:
temp1 = self.getFraction(number1, "/")
# print("temp1:" + str(temp1))
fraction1 = Fraction.Fraction(temp1[0], temp1[1])
else:
fraction1 = Fraction.Fraction(int(number1), 1)
if "’" in number2:
temp2 = self.getFraction(number2, "’")
# print("temp2:" + str(temp2))
fraction2 = Fraction.Fraction(temp2[0], temp2[1])
elif "’" not in number2 and "/" in number2:
temp2 = self.getFraction(number2, "/")
# print("temp2:" + str(temp2))
fraction2 = Fraction.Fraction(temp2[0], temp2[1])
else:
fraction2 = Fraction.Fraction(int(number2), 1)
symbol = self.symbolStack.pop()
if symbol == "+":
self.numberStack.push(fraction2.plus(fraction1).getResult())
elif symbol == "-":
self.numberStack.push(fraction2.minus(fraction1).getResult())
elif symbol == "×":
self.numberStack.push(fraction2.multiply(fraction1).getResult())
elif symbol == "÷":
if fraction1.numerator == 0:
print("错误:不能出现除数为0的情况")
return None
else:
self.numberStack.push(fraction2.divide(fraction1).getResult())
if element != "=":
self.symbolStack.push(element)
if element == ")":
self.symbolStack.pop()
self.symbolStack.pop()
return self.numberStack.pop()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Python
1
https://gitee.com/lzrun/Four_Arithmetic_Operations-for-python.git
git@gitee.com:lzrun/Four_Arithmetic_Operations-for-python.git
lzrun
Four_Arithmetic_Operations-for-python
Four_Arithmetic_Operations for python
master

搜索帮助