Python之实现一个简易计算器

来源:http://www.chinese-glasses.com 作者:Web前端 人气:96 发布时间:2020-04-15
摘要:时间: 2019-09-28阅读: 97标签: 表达式三元表达式怎么用? 10bet,自己动手写计算器 1. 赋值:const foo = condition ? 'bar' : 'baz'2. 执行操作:condition ? (...) : (...)3. 作为返回值:function(condition) {

时间: 2019-09-28阅读: 97标签: 表达式三元表达式怎么用?

10bet,自己动手写计算器

1. 赋值:const foo = condition ? 'bar' : 'baz'

2. 执行操作:condition ? (...) : (...)

3. 作为返回值:function(condition) { return condition ? 'bar' : 'baz'}

一、功能分析

  用户输入一个类似这样 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 这样的表达式,假设表达式里面除了包含空格、'+'、'-'、'*'、'/'和括号再无其他特殊符号,然后自己动手写代码解析其中的表达式,实现加减乘除最后得出的结果与真实的计算机所算的结果必须一致。

三元表达式怎么就有用了?

二、所需的知识点

  • 字符串的处理
  • 正则表达式的运用
  • 函数递归

代码量会减少这是事实,配合箭头函数写函数式代码,哪个更易读这个就是主观判断了,见仁见智:

三、程序实现流程分析

  1. 用正则表达式处理字符串,只提取其中的数字和运算符,并转换成列表
  2. 编写一个函数,处理没有括号的基本运算的基本表达式
  3. 再写一个函数递归处理带有括号的函数,先计算最内部括号中的表达式, 然后将最内部的括号替换为计算后的结果, 在递归外部一层的, 最后返回的就是所需的结果
实现一个 flat 函数:const isArr = arg = Object.prototype.toString.call(arg) === '[object Array]'const flat = inputAny = ( isArr(inputAny[0]) ? flat(inputAny[0]) : [inputAny[0]] ) .concat( inputAny.length  1 ? flat(inputAny.slice(1)) : [] )同样的思路用 if-else:const flat = inputAny = { let pre if (isArr(inputAny[0]) { pre = flat(inputAny[0]) } else { pre = [inputAny[0]] } if (inputAny.length  1) { return pre.concat(flat(inputAny.slice(1))) } else { return pre.concat([]) }}

function example() { return condition1 ? value1 : condition2 ? value2 : condition3 ? value3 : value4;}function example() { if (condition1) { return value1; } else if (condition2) { return value2; } else if (condition3) { return value3; } else { return value4; }}

四、具体实现过程

vue 里面的一个方法:

1.正则表达式处理用户输入字符串

  这里我不会讲正则表达式具体的用法,要将的话都可以讲一本书了,我只讲本文用到的正则表达式。根据需求,我们需要提取出用户输入字符串中的数字和运算符到一个列表中,而空格将会被忽略掉,假设用户输入的表达式是 expression,我们可以写出下面的代码:

import re
expression='(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4)'
l=re.findall('([d.]+|/|-|+|*)',expression)
print(l) #['100', '+', '40', '*', '5', '/', '2', '-', '3', '*', '2', '*', '2', '/', '4', '+', '9', '*', '3', '+', '4', '-', '4', '-', '4'] 

首先我们先看一下 findall 的用法,findall可以匹配所有符合规律的内容,返回包含结果的列表。'([d.]+|/|-|+|*)'是匹配规则,这里d表示匹配一个数字,.表示将.转义成数字上小数点 . ,不然在正则表达式里 . 可以匹配除了换行符以外的任意字符。[d.]+表示可以匹配至少由一个数字、或者小数点 . 组成的字符串,比如说,这里既可以匹配到100,也可以匹配到100.11。|/|-|+|* 表示匹配到+或-或*或/,()表示一组,这里意思是如果匹配到数字或者+或者-或者*或者/其中任意一个的话,就将其作为一组,然后添加到列表中去。

本文由10bet发布于Web前端,转载请注明出处:Python之实现一个简易计算器

关键词:

上一篇:vuedraggable:vue拖拽排序插件

下一篇:没有了

最火资讯