Python之字符串计算(计算器)

  1. import re
  2. expression = '-1-2*((60+2*(-3-40.0+42425/5)*(9-2*5/3+357/553/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))+56+(56-45)'
  3. question = eval(expression)
  4. print(question)
  5. def arithmetic(expression='1+1'):
  6. # content = re.search('\(([\-\+\*\/]*\d+\.?\d*)+\)', expression) # (-3-40.0/5)
  7. content = re.search('\(([-+*/]*\d+\.?\d*)+\)', expression) # (-3-40.0/5)
  8. print(111, content)
  9. if content:
  10. content = content.group()
  11. content = content[1:-1]
  12. print('content:', content)
  13. replace_content = next_arithmetic(content)
  14. expression = re.sub('\(([-+*/]*\d+\.?\d*)+\)', replace_content, expression, count=1)
  15. print('next_expression:', expression)
  16. else:
  17. answer = next_arithmetic(expression)
  18. return answer
  19. return arithmetic(expression)
  20. def next_arithmetic(content):
  21. while True:
  22. next_content_mul_div = re.search('\d+\.?\d*[*/][-+]?\d+\.?\d*', content) # 找出带有*/的式子
  23. if next_content_mul_div: # 如果content含有带有*/的式子
  24. next_content_mul_div = next_content_mul_div.group()
  25. print('next_content_mul_div:', next_content_mul_div)
  26. mul_div_content = mul_div(next_content_mul_div) # 计算出带有*/的式子
  27. print('mul_div_content:', mul_div_content)
  28. content = re.sub('\d+\.?\d*[*/][-+]?\d+\.?\d*', str(mul_div_content), content, count=1) # 把带有*/的式子计算出来后替换掉
  29. print('content:', content)
  30. continue
  31. next_content_add_sub = re.search('-?\d+\.?\d*[-+][-+]?\d+\.?\d*', content) # 找出带有-+的式子
  32. if next_content_add_sub: # 如果content含有带有+-的式子
  33. next_content_add_sub = next_content_add_sub.group()
  34. print('next_content_add_sub:', next_content_add_sub)
  35. add_sub_content = add_sub(next_content_add_sub) # 计算出带有-+的式子
  36. print('add_sub_content:', add_sub_content)
  37. add_sub_content = str(add_sub_content)
  38. content = re.sub('-?\d+\.?\d*[-+]-?\d+\.?\d*', str(add_sub_content), content, count=1) # 把带有-+的式子计算出来后替换掉
  39. print('content:', content)
  40. continue
  41. else:
  42. break
  43. return content
  44. def add_sub(content):
  45. if '+' in content:
  46. content = content.split('+')
  47. print(content)
  48. content = float(content[0]) + float(content[1])
  49. return content
  50. elif '-' in content:
  51. content = content.split('-')
  52. # 减法情况有多种
  53. if content[0] == '-' and content[2] == '-':
  54. # content = content.split('-')
  55. print(content)
  56. content = -float(content[1]) - float(content[-1])
  57. return content
  58. if content[0] == '-':
  59. # content = content.split('-')
  60. print(content)
  61. content = -float(content[1]) - float(content[-1])
  62. return content
  63. if content[1] == '-' and content[2] == '-':
  64. # content = content.split('-')
  65. print(content)
  66. content = -float(content[0]) + float(content[-1])
  67. return content
  68. if content[1] == '':
  69. # content = content.split('-')
  70. print(content)
  71. content = float(content[0]) - float(content[2])
  72. return content
  73. if content[0] == '' and content[2] != '':
  74. print(content)
  75. content = -float(content[1]) - float(content[2])
  76. return content
  77. if content[0] == '' and content[2] == '':
  78. print(content)
  79. content = -float(content[1]) + float(content[3])
  80. return content
  81. else:
  82. # content = content.split('-')
  83. print(content)
  84. content = float(content[0]) - float(content[1])
  85. return content
  86. def mul_div(content):
  87. if '*' in content:
  88. content = content.split('*')
  89. print(content)
  90. content = float(content[0]) * float(content[1])
  91. return content
  92. elif '/' in content:
  93. content = content.split('/')
  94. print(content)
  95. content = float(content[0]) / float(content[1])
  96. return content
  97. # expression = '1-2*((60+2*(-3-40.0/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'
  98. expression = '-1-2*((60+2*(-3-40.0+42425/5)*(9-2*5/3+357/553/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))+56+(56-45)'
  99. answer = arithmetic(expression)
  100. print(answer)

Python之字符串计算(计算器)的更多相关文章

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

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

  2. Python格式化字符串~转

    Python格式化字符串 在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整理一下,以便索引. 格式化操作符(%) "%"是Python风格的字符串格式化操作 ...

  3. Python格式化字符串

    在编写程序的过程中,经常需要进行格式化输出,每次用每次查.干脆就在这里整理一下,以便索引. 格式化操作符(%) "%"是Python风格的字符串格式化操作符,非常类似C语言里的pr ...

  4. python(七)字符串格式化、生成器与迭代器

    字符串格式化 Python的字符串格式化有两种方式:百分号方式.format方式 1.百分号的方式 %[(name)][flags][width].[precision]typecode (name) ...

  5. python反转字符串(简单方法)及简单的文件操作示例

    Python反转字符串的最简单方法是用切片: >>> a=' >>> print a[::-1] 654321 切片介绍:切片操作符中的第一个数(冒号之前)表示切片 ...

  6. Python中字符串的使用

    这篇文章主要介绍python当中用的非常多的一种内置类型——str.它属于python中的Sequnce Type(序列类型).python中一共7种序列类型,分别为str(字符串),unicode( ...

  7. Python:字符串

    一.序列的概念 序列是容器类型,顾名思义,可以想象,“成员”们站成了有序的队列,我们从0开始进行对每个成员进行标记,0,1,2,3,...,这样,便可以通过下标访问序列的一个或几个成员,就像C语言中的 ...

  8. Python基础——字符串

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 在Python中,字符串也是一种数据类型.相比其它数据类型,字符串算是比较复杂的.为何呢?因为字符串不仅包含英文字母 ...

  9. 【Python】 字符串的相关小知识点

    字符串 很久以前,刚接触IT知识的时候,我觉得字符串还有字符变量是很奇葩的存在.数字,数组,字典什么的这些数据类型要不就是自然界固有的要不就是为了计算方便而发明出来的一些数据的组合方式.但是字符串这玩 ...

随机推荐

  1. poj 2396 Budget【有上下界的网络流】

    第一步:建立无源汇有上下界的网络模型 每行 i 作为一个点并连边(s, i, Ri, Ri),每列 j 作为一个点并连边(j, t, Cj, Cj),设 Uij, Lij 分别表示第 i 行第 j 列 ...

  2. 文件系统访问控制ACL设置

    1.传统Linux文件系统权限的问题 传统Linux文件系统有三类用户:文件属主-u,组用户-g,其它用户-o,以及三种访问权限:读-r,写-w,执行或目录进入-x,但很多时候并不能满足对文件访问的细 ...

  3. ArrayList、HashMap 与 员工类(程序员、经理的结合使用) 相当于集合与继承的总结

    package Day28ketangzuoye; import java.util.ArrayList; import java.util.HashMap; import java.util.Map ...

  4. Java编码格式

    简介 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Jav ...

  5. [译]curl_multi_add_handle

    NAMEcurl_multi_add_handle - add an easy handle to a multi session添加easy handle到multi session中 SYNOPS ...

  6. Elixir安装

    参考:https://laravel.com/docs/5.2/elixir 1. 安装node 去这里下载 2.可以用淘宝的cnpm加速! npm install -g cnpm --registr ...

  7. JS操作CSS

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。

    题意: 给一个由n*m个正方形格子组成的矩形,其中每个格子的边都是可以走的,长度给定,规定:如果在进入该路前需要拐弯,或者走完该路需要拐弯,都是需要付出双倍距离的(每条路最多算2倍).问从起点到终点的 ...

  9. MAC加域重复跳出---"talagent"想使用“本地项目” 的钥匙串

    很简单的解决办法,就是把以前的钥匙串给删掉就好 (重要提示:这个方法,以前所有程序自动记录密码都会丢掉,safari的自动填充,QQ自动登录,imessages 的等等) 1.打开Finder -&g ...

  10. leetcode_712. Minimum ASCII Delete Sum for Two Strings

    https://leetcode.com/problems/minimum-ascii-delete-sum-for-two-strings/ 给定两个string s1,s2,从s1和s2中删除一些 ...