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实现的简单计算器相关推荐

  1. python写邮箱系统_Python django实现简单的邮件系统发送邮件功能

    本文实例讲述了Python django实现简单的邮件系统发送邮件功能.分享给大家供大家参考,具体如下: django邮件系统 Django发送邮件官方中文文档 总结如下: 1.首先这份文档看三两遍是 ...

  2. python web游戏实例_python实现的简单文本类游戏实例

    Python应用与实践 Python应用与实践 目录 1.      Python是什么? 1.1.      Python语言 1.2.      Python哲学 2.      Python在工 ...

  3. python所有插件框架_Python中实现简单的插件框架

    在系统设计中,经常我们希望设计一套插件机制,在不修改程序主体情况下,动态去加载附能. 我设想的插件系统: 1.通过类来实现 2.自动查找和导入 我们假设需要实现一个简单的插件系统,插件可以接收一个参数 ...

  4. python在线翻译代码_Python 20行简单实现有道在线翻译的详解

    简介 主要是尝试简单的使用pyhton的爬虫功能,于是使用有道进行尝试,并没有进行深入的诸如相关api的调用. 以下是需要的POST数据 代码 以下是相关部分的代码: import urllib.re ...

  5. python简单算法题_python几道简单的算法题

    最近看了python的语法,但是总感觉不知道怎么使用它,还是先来敲敲一些简单的程序吧. 1.题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十 ...

  6. python垃圾分类图像识别算法_Python 实现一个简单的垃圾分类小游戏(已获校级二等奖)...

    作者:Vincentish https://blog.csdn.net/Vincentish/article/details/107495432 项目简介 本项目报名参加了"兖州中材杯&qu ...

  7. python线性回归算法简介_Python实现的简单线性回归算法实例分析

    本文实例讲述了Python实现的简单线性回归算法.分享给大家供大家参考,具体如下: 用python实现R的线性模型(lm)中一元线性回归的简单方法,使用R的women示例数据,R的运行结果: > ...

  8. python数码时钟代码_Python+Pyqt实现简单GUI电子时钟

    本文实例为大家分享了Python+Pyqt实现简单GUI电子时钟的具体代码,供大家参考,具体内容如下 突发奇想想用GUI做一个简单的电子时钟界面,利用pyqt模块也很方便,代码如下: from PyQ ...

  9. python程序写诗_python写的简单发送邮件的脚本

    近来有些东西需要监控报警发邮件,然后在网上找了点材料,自己写了一个简单发送邮件的脚本,主要就是运用python的smtplib模块,分享给大家看一下: #!/usr/bin/env python # ...

最新文章

  1. MVVM架构~knockoutjs系列之验证成功提示显示
  2. 选择排序和Java实现、C++ vector 模板类实现
  3. 一个直接运行Windows命令行的软件
  4. Servlet之间的跳转
  5. composer 依赖包版本冲突_composer快速入门教程
  6. IEEE 回应禁止华为系审稿人;WiFi联盟、蓝牙联盟已恢复华为成员资格;中国计算机学会:暂时中止与IEEE通信学会合作……...
  7. Kafka 源码分析之网络层(一)
  8. 程序人生:女程序员的求职奋斗史
  9. 爱心的浪漫永不过时—程序猿的小浪漫
  10. python怎么把写在一个文件的类导入另一个文件_跟我一起自学python语言 第9章 类(9.4 导入类)...
  11. 逻辑卷、物理卷、卷组
  12. linux 更新系统命令,Linux系统自动更新时间命令的详细说明
  13. 机械工程matlab课程设计,浅论MATLAB在机械课程设计中的应用方法和技巧
  14. 考研要求过英语四六级!这些大学有明确规定!
  15. CCS安装失败的原因
  16. CSS 轮廓(outline)/CSS margin(外边距)/CSS padding(填充)
  17. php stomp rabbitmq,rabbitmq-web-stomp 优化过程
  18. CVE-2019-1458 分析
  19. 宇龙数控仿真安装后连接服务器失败解决方法
  20. ajax聊天室_Ajax聊天

热门文章

  1. Java String字符串补0或空格
  2. Domino/Xpages Bootstrap 动态生成首页功能
  3. Spark 0.8 集群(CentOS6.4)-简单统计测试
  4. 宿主机訪问virtualBox中Ubuntu
  5. 如何破解安卓手机上的图形锁(九宫格锁)
  6. Sublime注释插件--DocBlockr
  7. 获取事件相对于文档的位置
  8. 下列那个语句在python中是非法的_下列哪个语句在Python中是非法的()A.x=y=z=1B.x=(y=z+1)C.x,y=y,xD...
  9. 训练和验证准确性_通过沉浸式虚拟现实观察动作增强运动想象训练
  10. qudpsocket 丢包 线程解决_服装毕业设计一站式解决方案——线下amp;线上辅导课程...