python计算器_python 计算器示例(入门级,实现了加减乘除等功能)

【实例简介】

【实例截图】

d691379fe187e1d9b4f936b2fa7ebb41.png

【核心代码】

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# Author : QiuMeng

print("欢迎使用计算机")

import re

def replace_func(FormulaChunk):

'''

#去除一些会影响运算的符号

:param FormulaChunk: #传入一个去除括号后的字符串

:return: 去除这些东西后标准的返回

'''

FormulaChunk = FormulaChunk.replace(" ","")

FormulaChunk = FormulaChunk.replace(" -","-")

FormulaChunk = FormulaChunk.replace("--"," ")

return FormulaChunk

def mul_and_div(CombineHandlerList):

'''

计算乘法,除法

:return:返回一个没有任何"*/"字符的列表

'''

ChunkPartitionList = CombineHandlerList[1]

for index,item in enumerate(ChunkPartitionList):

if "*" in item or "/" in item: # 判断这个元素中是否有"*/"

OperatorList = re.findall("[*/]",item) # 分割出乘除号

PartitionList = re.split("[*/]",item) # 根据乘除分割

SumCount = None

for i,j in enumerate(PartitionList):

if SumCount: #第一个元素不计算

if OperatorList[i-1] == "*": # 算乘法

SumCount *= float(j)

elif OperatorList[i-1] == "/": # 算除法

SumCount /= float(j)

else:

SumCount = float(j)

ChunkPartitionList[index] = SumCount

return CombineHandlerList

def add_and_subtract(CombineHandlerListMuledAndDived):

'''

[['-', '-', '-', '-', '-', '-', ' '], ['-9', '2', '5', -6.0, 1.6666666666666667, 80.0, 0.6, 18.0]]

计算加减法

:param CombineHandlerListMuledAndDived: 经过正负聚合且完成乘除的list

:return: 返回一个只有一个float字符串的list

'''

# ['-', '-', '-', '-', '-', '-', ' ']

ChunkOperationList = CombineHandlerListMuledAndDived[0] # 加减操作符列表

# ['-9', '2', '5', -6.0, 1.6666666666666667, 80.0, 0.6, 18.0] # 注意其中的字符串和float

ChunkPartitionList = CombineHandlerListMuledAndDived[1] # 按加减分割后元素列表

SumCount = None

for index,item in enumerate(ChunkPartitionList):

if SumCount:

if ChunkOperationList[index-1] == "-": # 算减法

SumCount -= float(item)

elif ChunkOperationList[index-1] == " ": # 算加法

SumCount = float(item)

else:

SumCount = float(item)

return SumCount

def combine(HandlerList):

'''

将ChunkPartitionList中类似于"2*"和"-" "3"放在一起

:param HandlerList: 已经处理过的两个列表

:return:

'''

ChunkOperationList = HandlerList[0] # 操作符列表

ChunkPartitionList = HandlerList[1] # 按加减分割后元素列表

for index,item in enumerate(ChunkPartitionList):

if item.endswith("/") or item.endswith("*"):

ChunkPartitionList[index] = item ChunkOperationList[index] ChunkPartitionList[index 1] # 合并

del ChunkOperationList[index] # 合并完成后删除对应的元素

del ChunkPartitionList[index 1]

CombineHandlerList = []

CombineHandlerList.insert(0,ChunkOperationList)

CombineHandlerList.insert(1,ChunkPartitionList)

return CombineHandlerList

def handler_list(FormulaChunk):

'''

'(-9-2-5-2*-3-5/3-40*4/2-3/5 6*3)'

将这样的一个括号内的快转化为固定的列表返回

:param UserInput:

:return:

'''

FormulaChunk = re.sub("[()]", "", FormulaChunk) # 去掉字符串前后的括号

FormulaChunk = replace_func(FormulaChunk)

# '-9-2-5-2*-3-5/3-40*4/2-3/5 6*3'

ChunkOperationList = re.findall("[ -]",FormulaChunk) # 获取这个块的所有加减法运算符号来获取一个list

# ['-', '-', '-', '-', '-', '-', '-', '-', ' ']

ChunkPartitionList = re.split("[ -]",FormulaChunk) # 通过加减符号将Chunk分隔开来获取一个list

# ['', '9', '2', '5', '2*', '3', '5/3', '40*4/2', '3/5', '6*3']

if not ChunkPartitionList[0]: #ChunkPartitionList列表第一个是否为空,该块则以 -开始

if ChunkOperationList[0] == "-": # 是负号要加到第二个里面,删除两个列表的第一个元素

ChunkPartitionList[1] = ChunkOperationList[0] ChunkPartitionList[1]

del ChunkPartitionList[0]

del ChunkOperationList[0]

elif ChunkOperationList[0] == " ": # 是正号去除两个列表的第一个元素

del ChunkPartitionList[0]

del ChunkOperationList[0]

# ['-', '-', '-', '-', '-', '-', '-', ' ']

# ['-9', '2', '5', '2*', '3', '5/3', '40*4/2', '3/5', '6*3']

# 这样的列表元素要进行再次处理将"2*"和"-" "3"放在一起

HandlerList = []

HandlerList.insert(0,ChunkOperationList)

HandlerList.insert(1,ChunkPartitionList)

return HandlerList

def calculate(UserInput):

'''

主函数

:param formula:

:return:

'''

# TODO 这块可以使用递归来写

while UserInput: #输入不为空

UserInput = UserInput.replace(" ", "") # 去掉空格

if re.findall("[()]",UserInput): # 是否有括号

FormulaChunk = re.search("\([^()] \)",UserInput).group() # 获取一个括号

# 要把括号中的一些东西给去除掉

HandlerList = handler_list(FormulaChunk) # 按照加减符号进行第一个分割

CombineHandlerList = combine(HandlerList) # 将ChunkPartitionList中类似于"2*"和"-" "3"放在一起后list

CombineHandlerListMuledAndDived = mul_and_div(CombineHandlerList) # 计算完成后乘除法的list

SumCount = add_and_subtract(CombineHandlerListMuledAndDived) # 计算完成加减法后的结果

UserInput = UserInput.replace(FormulaChunk,str(SumCount))

else: # 如果没有的话将其转化成对应的列表格式进行计算

HandlerList = handler_list(UserInput)

CombineHandlerList = combine(HandlerList)

CombineHandlerListMuledAndDived = mul_and_div(CombineHandlerList)

SumCount = add_and_subtract(CombineHandlerListMuledAndDived)

print(SumCount)

break

if __name__ == '__main__':

#formula = "1 - 2 * (30 (60-30 (-9-2- 5-2*-3-5/3-40*4/2-3/5 6*3) * (-9-2-5-2*5/3 7 /3*99/4*2998 10 * 568/14 )) -(-4*3)/ (16-3*2) )"

formula = input(">")

calculate(formula)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值