python简单计算器异常处理_Python实现的简单计算器
GUI运行截图:
上面那个简单的UI是用PyQt4实现的,如果对Qt比较熟悉的话,非常容易上手。
比如:
PyQt4里的单行文本框:
self.line_edit = QtGui.QLineEdit() # create an object of single line edit box
self.line_edit.text() # get texts in the edit box
self.line_setText("text") # set the text of edit box
还有Qt的布局:
self.main_layout = QtGui.QGridLayout()
# add layouts
self.main_layout.addLayout(self.edit_line_layout, 0, 0)
self.main_layout.addLayout(self.button_layout, 1, 0)
# set layout to window
self.setLayout(self.main_layout)
这些跟QT的用法一样,由于python的语法,写起来很简洁。
对于这个小东西,还有一点可以说的就是,异常处理。
下面是从后缀表达式得出计算结果的函数:
#calculate from stack, return result string
def calculate_from_stack(suffix_stack):
error_str = "error"
nan_str = "NaN"
if None == suffix_stack:
print "stack is empty!"
return error_str
data = suffix_stack.get_data()
calculate_stack = ExpStack.ExpStack()
for ele in data:
if is_number_str(ele):
calculate_stack.push(ele)
elif is_calculator_option(ele):
if calculate_stack.size() < 2:
print "Wrong suffix exps."
print_calculator_stack(suffix_stack)
return error_str
try:
num1 = float(calculate_stack.get_top())
calculate_stack.pop()
num2 = float(calculate_stack.get_top())
calculate_stack.pop()
if "+" == ele:
calculate_stack.push(num1+num2)
elif "-" == ele:
calculate_stack.push(num2-num1)
elif "*" == ele:
calculate_stack.push(num2*num1)
elif "/" == ele:
calculate_stack.push(num2/num1)
elif "^" == ele:
calculate_stack.push(num2**num1)
else:
print "Unknown calculator operator", ele
return error_str
except TypeError, e:
print "type error:", e
return error_str
except ValueError, e:
print "value error:", e
return error_str
except ZeroDivisionError, e:
print "divide zero error:", e
return nan_str
if 1 == calculate_stack.size():
return str(calculate_stack.get_top())
else:
print "Unknown error, calculate stack:"
print_calculator_stack(calculate_stack)
return error_str
由于python是弱类型的语言,我直接把栈里的字符串拿出来,转化为float进行运算,然后又压入栈中。
这样基本上不会因为数据类型的问题而头疼(之前用C 写的时候,因为类型问题,而开了两个栈,一个存运算符,一个存数字,那麻烦程度,不用多说),即使由于float()函数产生异常,用try-except语句也能轻松搞定,并且语法还比java,C++的try-catch要简洁。Python这么好用,为什么大学里不开设这门课呢?反而大部分同学编程入门都是学的比Python深奥的多的C,C++,因为Python太简单了吗?
总体来说,用python写程序真让人轻松不少。
python简单计算器异常处理_Python实现的简单计算器相关推荐
- python写邮箱系统_Python django实现简单的邮件系统发送邮件功能
本文实例讲述了Python django实现简单的邮件系统发送邮件功能.分享给大家供大家参考,具体如下: django邮件系统 Django发送邮件官方中文文档 总结如下: 1.首先这份文档看三两遍是 ...
- python web游戏实例_python实现的简单文本类游戏实例
Python应用与实践 Python应用与实践 目录 1. Python是什么? 1.1. Python语言 1.2. Python哲学 2. Python在工 ...
- python所有插件框架_Python中实现简单的插件框架
在系统设计中,经常我们希望设计一套插件机制,在不修改程序主体情况下,动态去加载附能. 我设想的插件系统: 1.通过类来实现 2.自动查找和导入 我们假设需要实现一个简单的插件系统,插件可以接收一个参数 ...
- python在线翻译代码_Python 20行简单实现有道在线翻译的详解
简介 主要是尝试简单的使用pyhton的爬虫功能,于是使用有道进行尝试,并没有进行深入的诸如相关api的调用. 以下是需要的POST数据 代码 以下是相关部分的代码: import urllib.re ...
- python简单算法题_python几道简单的算法题
最近看了python的语法,但是总感觉不知道怎么使用它,还是先来敲敲一些简单的程序吧. 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十 ...
- python垃圾分类图像识别算法_Python 实现一个简单的垃圾分类小游戏(已获校级二等奖)...
作者:Vincentish https://blog.csdn.net/Vincentish/article/details/107495432 项目简介 本项目报名参加了"兖州中材杯&qu ...
- python线性回归算法简介_Python实现的简单线性回归算法实例分析
本文实例讲述了Python实现的简单线性回归算法.分享给大家供大家参考,具体如下: 用python实现R的线性模型(lm)中一元线性回归的简单方法,使用R的women示例数据,R的运行结果: > ...
- python数码时钟代码_Python+Pyqt实现简单GUI电子时钟
本文实例为大家分享了Python+Pyqt实现简单GUI电子时钟的具体代码,供大家参考,具体内容如下 突发奇想想用GUI做一个简单的电子时钟界面,利用pyqt模块也很方便,代码如下: from PyQ ...
- python程序写诗_python写的简单发送邮件的脚本
近来有些东西需要监控报警发邮件,然后在网上找了点材料,自己写了一个简单发送邮件的脚本,主要就是运用python的smtplib模块,分享给大家看一下: #!/usr/bin/env python # ...
最新文章
- MVVM架构~knockoutjs系列之验证成功提示显示
- 选择排序和Java实现、C++ vector 模板类实现
- 一个直接运行Windows命令行的软件
- Servlet之间的跳转
- composer 依赖包版本冲突_composer快速入门教程
- IEEE 回应禁止华为系审稿人;WiFi联盟、蓝牙联盟已恢复华为成员资格;中国计算机学会:暂时中止与IEEE通信学会合作……...
- Kafka 源码分析之网络层(一)
- 程序人生:女程序员的求职奋斗史
- 爱心的浪漫永不过时—程序猿的小浪漫
- python怎么把写在一个文件的类导入另一个文件_跟我一起自学python语言 第9章 类(9.4 导入类)...
- 逻辑卷、物理卷、卷组
- linux 更新系统命令,Linux系统自动更新时间命令的详细说明
- 机械工程matlab课程设计,浅论MATLAB在机械课程设计中的应用方法和技巧
- 考研要求过英语四六级!这些大学有明确规定!
- CCS安装失败的原因
- CSS 轮廓(outline)/CSS margin(外边距)/CSS padding(填充)
- php stomp rabbitmq,rabbitmq-web-stomp 优化过程
- CVE-2019-1458 分析
- 宇龙数控仿真安装后连接服务器失败解决方法
- ajax聊天室_Ajax聊天
热门文章
- Java String字符串补0或空格
- Domino/Xpages Bootstrap 动态生成首页功能
- Spark 0.8 集群(CentOS6.4)-简单统计测试
- 宿主机訪问virtualBox中Ubuntu
- 如何破解安卓手机上的图形锁(九宫格锁)
- Sublime注释插件--DocBlockr
- 获取事件相对于文档的位置
- 下列那个语句在python中是非法的_下列哪个语句在Python中是非法的()A.x=y=z=1B.x=(y=z+1)C.x,y=y,xD...
- 训练和验证准确性_通过沉浸式虚拟现实观察动作增强运动想象训练
- qudpsocket 丢包 线程解决_服装毕业设计一站式解决方案——线下amp;线上辅导课程...