带括号的计算器也是第一个自我感觉完成最好的 毕竟真的弄了一个多星期 虽然前期这路真的很难走  我会努力加油  将Python学好学踏实

参考了两位博主的文章

http://www.cnblogs.com/0zcl/p/5983236.html

http://www.cnblogs.com/loyfee/p/5764926.html#3538071

大致过程就是 先将输入的数据转为列表 当中去除空字符  

接着找出最里层括号 进行运算 再将结果放回列表 最后算出结果

  1. import re
  2. #data = input("请输入算术:")
  3.  
  4. def change_list(data):
  5. data =re.sub(" ","",data)#将空格转为""
  6. # print(data)
  7. data_list = []
  8. for i in data:
  9. data_list.append(i)
  10. num =
  11. try:
  12. while :
  13. if data_list[] == "-":
  14. data_list[] = data_list[] + data_list[]
  15. data_list.pop()
  16. if data_list[num].isnumeric():
  17. if data_list[num+].isnumeric():
  18. data_list[num] = data_list[num]+data_list[num+]
  19. data_list.pop(num+)
  20. else:
  21. num +=
  22. else:
  23. num +=
  24. except IndexError as e:
  25. #print(e,"索引越界")
  26. return data_list
  27. # if data_list.index(data_list[-]) <num:
  28. # print(data_list)
  29. # break
  30.  
  31. def compute(data):
  32. while :
  33. #判断乘除
  34. if "*" in data or "/" in data:
  35. for i,j in enumerate(data):
  36. if j == "*":
  37. data[i+] =int(data[i-]) * int(data[i+])
  38. data.pop(i-)
  39. data.pop(i-)
  40. break
  41. if j == "/":
  42. data[i+] =int(data[i-]) * int(data[i+])
  43. data.pop(i-)
  44. data.pop(i-)
  45. break
  46. #判断加减
  47. if "+" in data or "-" in data:
  48. for i,j in enumerate(data):
  49. if j == "+":
  50. data[i + ] = int(data[i - ]) + int(data[i + ])
  51. data.pop(i - )
  52. data.pop(i - )
  53. break
  54. if j == "-":
  55. data[i + ] = int(data[i - ]) - int(data[i + ])
  56. data.pop(i - )
  57. data.pop(i - )
  58. break
  59. else:
  60. return data
  61. break
  62.  
  63. #有括号和无括号运算
  64. """
  65. 如果有括号 则会以最里层的“)”去找到与其第一个“(” 用:截取中间的数字进行运算,接着传回列表
  66. 直到没有括号时跳出 进行运算
  67. """
  68. def parenth(data):
  69. if "(" in data:
  70. while :
  71. if ")" in data:
  72. b = data.index(")")#表示第一个“)”的索引位置
  73. #print(b)
  74. for i in range(b,-,-): #截取最里层括号进行运算
  75. #print(i)
  76.  
  77. if data[i] == "(":
  78. new_list = []
  79. new_list=data[i+:b]
  80. byte=compute(new_list)[]
  81. del(data[i:b+])
  82. data.insert(i,byte)
  83. break
  84. else:
  85. return compute(data)
  86.  
  87. else:
  88. compute(data)
  89. while :
  90. data = input("请输入计算:")
  91. if data == "":continue
  92. data = change_list(data)
  93. parenth(data)
  94. print(data[])
  95. if input("如果输入q则退出:\n") == "q":
  96. exit()

Python带括号的计算器的更多相关文章

  1. python函数带不带括号的问题

    Python带括号返回的是该函数的返回值 不带括号返回的是该函数的位置信息等

  2. 使用python开发一个能够计算带括号的复杂表达式的计算器(只支持加减乘除)

    使用到了模块re,正则,字典等 # 实现简单的加减乘除括号等运算 # Calculator def calculator(expression): print(expression) import r ...

  3. Python中类-带括号与不带括号的区别

    类不带括号我们叫赋值,带括号我们叫实例化. 什么是赋值? a=7 b=a id(7) 140726814208448 id(a) 140726814208448 id(b) 1407268142084 ...

  4. Python调用函数带括号和不带括号的区别

    1.不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不需等该函数执行完成 2.带括号(此时必须传入需要的参数),调用的是函数的return结果,需要等待函数执行完成的结果 如果函数本 ...

  5. python装饰器带括号和不带括号的语法和用法

    装饰器的写法补充: 通常装饰器的写法是@func(),而有的时候为了减少出错率,可能会写成@func,没有()括号,这时我们可以这样定义,来减少括号.下面通过两个例子还看. 一般装饰器的写法: def ...

  6. Python笔记:调用函数,带扩号和和不带括号的区别

    调用函数,如果带括号,那么是调用函数运行后的结果, 调用函数不带括号,调用的是函数本身 例如: def cun (a,b): return a+b print(cun) : 调用函数,打印的是函数 p ...

  7. 教学项目之-通过Python实现简单的计算器

    教学项目之-通过Python实现简单的计算器   计算器开发需求 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/ ...

  8. python实现简单的计算器功能

    如想实现一个计算器的功能,输入格式为字符串,不能运用python里面的内置方法,出去简单的加减乘除,设计一个相对高级的计算器: a = '1 - 2 * ( ( 6 0 -3 0 +(-40/5) * ...

  9. python正则实现简单计算器

    利用正则实现计算器 利用正则来实现简单计算器的功能,能够设计计算带括号的加减乘除运算.当然不使用eval等语句. 利用递归: import re from functools import reduc ...

随机推荐

  1. Tsinsen A1303. tree(伍一鸣) LCT

    LCT的各种操作... . cut link add mul size rev query 写的效率不够高... BZOJ上似乎TLE. ... A1303. tree(伍一鸣) 时间限制:2.5s  ...

  2. 主程的晋升攻略(4):TCP、消息分包和协议设计

    在<主程的晋升攻略(3):IP.DNS和CDN>中,一次网络请求经过DNS解析知道了目的IP,如今就要发出网络包,这里我们说一说TCP的相关话题. TCP是一种流式协议 讲网络编程的教科书 ...

  3. 改动Android设备信息,如改动手机型号为iPhone7黄金土豪版!

    首先你的手机必需要有ROOT权限,误操作有风险需慎重 请先开启手机的USB调试,防止手机改动后无法启动时导致的无法修复 1.假设你是在手机上改动,直接使用RE文件管理器,编辑/system/build ...

  4. Linux线程相互排斥量--进程共享属性

    多线程中.在相互排斥量和 读写锁的 属性中.都有一个叫 进程共享属性 . 对于相互排斥量,查询和设置这个属性的方法为: pthread_mutexattr_getpshared pthread_mut ...

  5. PhpStorm Live Template加PHP短语法Short Open Tags打造原生模板

    关于Php要不要使用模板一直被大家讨论,支持的说使用模板更简洁,易与前端project师交流.反对的说Php本身就支持内嵌语法,不是必需再用个模板,减少性能. 事实上使用Php的短语法.直接嵌入也不是 ...

  6. SQL Server单表已700w+将普通表转换成分区表1

    最近项目中,某个表数据量爆发时增长,单表已700w+,读写性能急剧下降,所以考虑加入分区表以解燃眉之急,后续还是要分表分库,当然这是后话.下面简要说一下将普通表转为分区表的步骤.   一.创建文件组 ...

  7. Mysql优化理论知识

    参考文章 http://blog.51cto.com/lizhenliang/2095526 ()硬件优化 如果有条件一定要SSD固态硬盘代替SAS机械硬盘,将RAID级别调整为RAID1+,相对于R ...

  8. [Project Euler 409] Nim Extreme 解题报告 (统计方案数)

    题目链接:https://projecteuler.net/problem=409 题目: 题解: 题目问你必胜态的数目,我们考虑用总的方案数减去必败态的方案数(NIM游戏没有平局这个操作) 必败态的 ...

  9. Leaflet学习笔记(一)

    一.简介 Leaflet是一个主要适用于移动端交互地图的领先的开源javascript库.虽然js库只有38KB左右,但是却能满足大部分开发者的所有功能需求. Leaflet拥有着简单,高效和实用的设 ...

  10. Ubuntu 18.04 安装 Broadcom Limited BCM43142无线网卡驱动

    系统默认没有集成 BCM43142无线网卡驱动可以通过下面的方法安装--------------------------------------------------------------root ...