Python带括号的计算器
带括号的计算器也是第一个自我感觉完成最好的 毕竟真的弄了一个多星期 虽然前期这路真的很难走 我会努力加油 将Python学好学踏实
参考了两位博主的文章
http://www.cnblogs.com/0zcl/p/5983236.html
http://www.cnblogs.com/loyfee/p/5764926.html#3538071
大致过程就是 先将输入的数据转为列表 当中去除空字符
接着找出最里层括号 进行运算 再将结果放回列表 最后算出结果
- import re
- #data = input("请输入算术:")
- def change_list(data):
- data =re.sub(" ","",data)#将空格转为""
- # print(data)
- data_list = []
- for i in data:
- data_list.append(i)
- num =
- try:
- while :
- if data_list[] == "-":
- data_list[] = data_list[] + data_list[]
- data_list.pop()
- if data_list[num].isnumeric():
- if data_list[num+].isnumeric():
- data_list[num] = data_list[num]+data_list[num+]
- data_list.pop(num+)
- else:
- num +=
- else:
- num +=
- except IndexError as e:
- #print(e,"索引越界")
- return data_list
- # if data_list.index(data_list[-]) <num:
- # print(data_list)
- # break
- def compute(data):
- while :
- #判断乘除
- if "*" in data or "/" in data:
- for i,j in enumerate(data):
- if j == "*":
- data[i+] =int(data[i-]) * int(data[i+])
- data.pop(i-)
- data.pop(i-)
- break
- if j == "/":
- data[i+] =int(data[i-]) * int(data[i+])
- data.pop(i-)
- data.pop(i-)
- break
- #判断加减
- if "+" in data or "-" in data:
- for i,j in enumerate(data):
- if j == "+":
- data[i + ] = int(data[i - ]) + int(data[i + ])
- data.pop(i - )
- data.pop(i - )
- break
- if j == "-":
- data[i + ] = int(data[i - ]) - int(data[i + ])
- data.pop(i - )
- data.pop(i - )
- break
- else:
- return data
- break
- #有括号和无括号运算
- """
- 如果有括号 则会以最里层的“)”去找到与其第一个“(” 用:截取中间的数字进行运算,接着传回列表
- 直到没有括号时跳出 进行运算
- """
- def parenth(data):
- if "(" in data:
- while :
- if ")" in data:
- b = data.index(")")#表示第一个“)”的索引位置
- #print(b)
- for i in range(b,-,-): #截取最里层括号进行运算
- #print(i)
- if data[i] == "(":
- new_list = []
- new_list=data[i+:b]
- byte=compute(new_list)[]
- del(data[i:b+])
- data.insert(i,byte)
- break
- else:
- return compute(data)
- else:
- compute(data)
- while :
- data = input("请输入计算:")
- if data == "":continue
- data = change_list(data)
- parenth(data)
- print(data[])
- if input("如果输入q则退出:\n") == "q":
- exit()
Python带括号的计算器的更多相关文章
- python函数带不带括号的问题
Python带括号返回的是该函数的返回值 不带括号返回的是该函数的位置信息等
- 使用python开发一个能够计算带括号的复杂表达式的计算器(只支持加减乘除)
使用到了模块re,正则,字典等 # 实现简单的加减乘除括号等运算 # Calculator def calculator(expression): print(expression) import r ...
- Python中类-带括号与不带括号的区别
类不带括号我们叫赋值,带括号我们叫实例化. 什么是赋值? a=7 b=a id(7) 140726814208448 id(a) 140726814208448 id(b) 1407268142084 ...
- Python调用函数带括号和不带括号的区别
1.不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不需等该函数执行完成 2.带括号(此时必须传入需要的参数),调用的是函数的return结果,需要等待函数执行完成的结果 如果函数本 ...
- python装饰器带括号和不带括号的语法和用法
装饰器的写法补充: 通常装饰器的写法是@func(),而有的时候为了减少出错率,可能会写成@func,没有()括号,这时我们可以这样定义,来减少括号.下面通过两个例子还看. 一般装饰器的写法: def ...
- Python笔记:调用函数,带扩号和和不带括号的区别
调用函数,如果带括号,那么是调用函数运行后的结果, 调用函数不带括号,调用的是函数本身 例如: def cun (a,b): return a+b print(cun) : 调用函数,打印的是函数 p ...
- 教学项目之-通过Python实现简单的计算器
教学项目之-通过Python实现简单的计算器 计算器开发需求 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/ ...
- python实现简单的计算器功能
如想实现一个计算器的功能,输入格式为字符串,不能运用python里面的内置方法,出去简单的加减乘除,设计一个相对高级的计算器: a = '1 - 2 * ( ( 6 0 -3 0 +(-40/5) * ...
- python正则实现简单计算器
利用正则实现计算器 利用正则来实现简单计算器的功能,能够设计计算带括号的加减乘除运算.当然不使用eval等语句. 利用递归: import re from functools import reduc ...
随机推荐
- Tsinsen A1303. tree(伍一鸣) LCT
LCT的各种操作... . cut link add mul size rev query 写的效率不够高... BZOJ上似乎TLE. ... A1303. tree(伍一鸣) 时间限制:2.5s ...
- 主程的晋升攻略(4):TCP、消息分包和协议设计
在<主程的晋升攻略(3):IP.DNS和CDN>中,一次网络请求经过DNS解析知道了目的IP,如今就要发出网络包,这里我们说一说TCP的相关话题. TCP是一种流式协议 讲网络编程的教科书 ...
- 改动Android设备信息,如改动手机型号为iPhone7黄金土豪版!
首先你的手机必需要有ROOT权限,误操作有风险需慎重 请先开启手机的USB调试,防止手机改动后无法启动时导致的无法修复 1.假设你是在手机上改动,直接使用RE文件管理器,编辑/system/build ...
- Linux线程相互排斥量--进程共享属性
多线程中.在相互排斥量和 读写锁的 属性中.都有一个叫 进程共享属性 . 对于相互排斥量,查询和设置这个属性的方法为: pthread_mutexattr_getpshared pthread_mut ...
- PhpStorm Live Template加PHP短语法Short Open Tags打造原生模板
关于Php要不要使用模板一直被大家讨论,支持的说使用模板更简洁,易与前端project师交流.反对的说Php本身就支持内嵌语法,不是必需再用个模板,减少性能. 事实上使用Php的短语法.直接嵌入也不是 ...
- SQL Server单表已700w+将普通表转换成分区表1
最近项目中,某个表数据量爆发时增长,单表已700w+,读写性能急剧下降,所以考虑加入分区表以解燃眉之急,后续还是要分表分库,当然这是后话.下面简要说一下将普通表转为分区表的步骤. 一.创建文件组 ...
- Mysql优化理论知识
参考文章 http://blog.51cto.com/lizhenliang/2095526 ()硬件优化 如果有条件一定要SSD固态硬盘代替SAS机械硬盘,将RAID级别调整为RAID1+,相对于R ...
- [Project Euler 409] Nim Extreme 解题报告 (统计方案数)
题目链接:https://projecteuler.net/problem=409 题目: 题解: 题目问你必胜态的数目,我们考虑用总的方案数减去必败态的方案数(NIM游戏没有平局这个操作) 必败态的 ...
- Leaflet学习笔记(一)
一.简介 Leaflet是一个主要适用于移动端交互地图的领先的开源javascript库.虽然js库只有38KB左右,但是却能满足大部分开发者的所有功能需求. Leaflet拥有着简单,高效和实用的设 ...
- Ubuntu 18.04 安装 Broadcom Limited BCM43142无线网卡驱动
系统默认没有集成 BCM43142无线网卡驱动可以通过下面的方法安装--------------------------------------------------------------root ...