evaluate函数使用无效_[Python实战]使用栈实现简易计算器
我们这次实现的命令行计算器,支持加减乘除、括号、浮点数、负数,以及查看历史和退出功能。
主要的思路:read - parse - print - loop。
read 阶段是指读取用户在提示符(cal> )之后输入的字符串。
parse 阶段包括:将用户输入的字符串分割成单个对象比如:符号 +,或者数字 1.2 。其次将中缀表达式转化后缀表达式,接下来计算后缀表达式的数值。
print 阶段指的是将 parse 阶段的数值打印在终端上。
loop 阶段是指重复上述操作,除非用户输入 exit 符号或者 Ctrl + C 终止程序运行。
实现效果图:
栈
为了实现后面的中缀、后缀表达式,我们需要借助栈这种数据结构。
栈是一种先进后出的数据结构,函数调用时就会使用栈来保存当前程序的地址及其他信息,前面的深度优先搜索就是基于栈实现的。
之前写了一篇文章介绍了栈的用法,下面简单说明栈的使用:
push 函数在栈的顶部添加元素,pop 函数删除栈顶的元素,top 函数查看栈顶元素。
class Stack:
分词
分词是 parse 阶段的重要部分。
我们定义符号 + - * / ( )。
将这些字符串中的这些符号替换为:空格 + 符号 + 空格
+ => 空格+空格
将字符串按空格分割,得到最终的分词
经过上述操作,就可以实现对正数以及操作符的分词功能。
# Python高效编程 # 分割字符串 seq: List[str] = expression.split()
为了实现对负数的分词,我们需要迭代分词序列,将‘-’ 与后面的数字转换成一个整体。我们有两种情况将 - 视作负号,第一种情况,负号位于字符串的开头;第二种情况,负号前一个符号为左括号。
# Python高效编程
中缀表达式
中缀表达式就是我们写的各种表达式,如 3 + 2 * 4。我们希望将其转化为后缀表达式,示例如下:
=>
我们需要准备一个栈 stack ,用于临时存放操作符;准备一个序列 seq,用来存放输出结果,也就是后缀表达式。
转化规则:
迭代分词序列,遇到数字,就将数字输出到序列 seq 中。
定义各个符号优先级,其中 乘除 > 加减 > 右括号。比较当前符号与栈顶元素的优先级,如果当前元素的优先级小于等于栈顶元素的优先级,就弹出栈顶元素,输出到 seq 序列中,然后将当前元素压入栈中。如果当前元素的优先级大于栈顶元素的优先级,或者当前元素为右括号,我们直接将当前元素压入栈中。
如果遇到左括号,我们就弹出栈中元素,并输出到 seq 序列中。其中,左右括号不输出到序列中。
最后,将栈中剩余的符号输出到 seq 序列中。
# Python高效编程
代码如下:
# Python高效编程
后缀表达式
后缀表达式的规则:遇到数值就压入栈中;遇到符号,就从栈中弹出两个元素,计算两个元素运算结果,将得到的结果压入栈中。
# Python高效编程
总结
接下来还有添加查看历史和退出功能以及整个程序的组成,关注微信公众号python高效编程
在后台回复 2019813
获取源代码及 exe 文件。
evaluate函数使用无效_[Python实战]使用栈实现简易计算器相关推荐
- evaluate函数使用无效_我用这个Excel函数,秀了同事一脸!很多人却连它名字都没听过...
最近收到在某快递上班的周同学问题求助,主要是在计算包裹的体积时遇到了些麻烦事. 下表是周同学近期整理的快递包裹尺寸数据,其中重要一项工作就是通过长*宽*高来计算出包裹的体积. 周同学表示其实自己也能做 ...
- evaluate函数使用无效_在Matlab中使用tensorflow (2)
本篇介绍如何在matlab中调用python训练好的网络模型和权重. 系统环境:win10,matlab2018b,python3.6,tensorflow1.1 代码如下: tf = py.impo ...
- evaluate函数使用无效_使用Keras和Pytorch处理RNN变长序列输入的方法总结
最近在使用Keras和Pytorch处理时间序列数据,在变长数据的输入处理上踩了很多坑.一般的通用做法都需要先将一个batch中的所有序列padding到同一长度,然后需要在网络训练时屏蔽掉paddi ...
- python画完图 程序暂停运行_[Python实战]你也能写的计时器程序
文章地址:[Python实战]你也能写的计时器程序 上次,公众号介绍了如何使用 Pyqt5 制作猜数游戏界面,并介绍了如何在 Pycharm 中使用 Qt Designer 生成 UI 文件.这次,我 ...
- 基于python:利用pyqt5设计简易计算器
实训内容: 跟随学习,用python写一个能进行简易运算的计算器,并自己设计计算器的UI界面,并根据实际对外观做出一定的美化. 准备过程 本次使用的是Windows11,python环境3.9.15 ...
- python实验指导书答案函数代码复用_#Python学习笔记(5)函数和代码重用,复用
七段数码管绘制 绘制单段数码管 def drawLine(draw): turtle.pendown() if draw else turtle.penup() #将绘制一条线定义为一个基本函数, 参 ...
- python田字格函数简化代码_[Python]使用生成器来简化代码
原本只是大概知道生成器是什么,但一直不知道怎么用,或是什么情景下用,后来才发现: 在需要一边读数据一边处理任务时,如果直接为每个任务都写一个函数,那么读数据的部分就要在每个函数都重复一遍 直接将所有任 ...
- python中complex函数的用法_Python中complex函数有什么用
Python中complex函数有什么用 发布时间:2020-12-15 09:34:36 来源:亿速云 阅读:71 作者:小新 这篇文章给大家分享的是有关Python中complex函数有什么用的 ...
- evaluate函数使用无效_VBA学习笔记5:函数与公式
学习资源:<Excel VBA从入门到进阶>第六讲 函数与公式 by蓝色幻想 一.在单元格中输入公式 1.用VBA在单元格中输入普通公式 Sub t1()Range("d2&qu ...
最新文章
- 指针系统学习7-返回指针值的函数
- IOS开发之--UIScrollView pagingEnabled自定义翻页宽度
- react滑动切换tab动画效果_[React Native]react-native-scrollable-tab-view(入门篇)
- 重磅!Vue3.0终终终于要来了!
- 投票列表排序 - 默认,投票数
- c++ 捕获所有异常
- Chrome扩展开发指南(
- 基于单片机的水温液位监测系统设计(#0513)
- 海康威视摄像头的多通道rtsp地址格式
- linux内top命令,Linux中的top命令的详细解释
- 运维——ssh无法登录云服务器
- 直流无刷电机及Matlab/Simulink驱动仿真
- 时间抖动(jitter)--学习笔记
- hive执行报错:Both left and right aliases encountered in JOIN
- jdk1.8api中英文版
- 信息安全学习4. 重放攻击的概念与防范
- 山西计算机教室配备标准,山西省义务教育阶段中小学现代教育技术设备配备标准.doc...
- Ubuntu服务器的安装和配置----系统安装
- 有难度无危险 强制打开Vista Aero特效
- mac可装云服务器_(mac)阿里云ECS服务器配置过程