言归正传,现在我们开始编写代码。我们将用一个非常简单的转换器来扫描这棵树。它会从最外面的分支开始扫描,直到到达根节点为止,而我们的工作是告诉它如何扫描。如果一切顺利的话,它将总会从最外层开始扫描!让我们看看具体的实现吧。

>>>importoperator as op

>>>fromplyplusimportSTransformer

classCalc(STransformer):

def_bin_operator(self, exp):

arg1, operator_symbol, arg2=exp.tail

operator_func={'+': op.add,

'-': op.sub,

'*': op.mul,

'/': op.div }[operator_symbol]

returnoperator_func(arg1, arg2)

number =lambdaself, exp:float(exp.tail[0])

neg =lambdaself, exp:-exp.tail[0]

__default__=lambdaself, exp: exp.tail[0]

add=_bin_operator

mul=_bin_operator

每个方法都对应一个规则。如果方法不存在的话,将调用__default__方法。我们在其中省略了start,add_symbol和mul_symbol,因为它们只会返回自己的分支。

我使用了float()来解析数字,这是个懒方法,但我也可以用解析器来实现。

为了使语句整洁,我使用了运算符模块。例如add基本上是 'lambda x,y: x+y'之类的。

OK,现在我们运行这段代码来检查一下结果。

>>> Calc().transform( g.parse('1 + 2 * -(-3+2) / 5.6 + 30'))

31.357142857142858 那么eval()呢?7

>>>eval('1 + 2 * -(-3+2) / 5.6 + 30')

31.357142857142858 成功了:)

如何用python设计一个计算器程序_如何使用 50 行 Python 代码制作一个计算器相关推荐

  1. 如何制作python代码_如何使用50行Python代码制作一个计算器

    (点击上方公号,可快速关注) 作者:Stories For Sad Robots 译者:开源中国社区 链接:http://www.oschina.net/translate/how-to-write- ...

  2. python怎么做软件程序_如何打包和发布Python程序

    如何打包和发布Python程序 在使用Python的过程中,我们经常需要做的一件事情就是通过pip来安装第三方的包.那么你是否也曾想过pip安装的包是怎么被打包并发布上去的呢?今天就来说一说Pytho ...

  3. python设计查询余额程序_【Python】查询账户余额demo---创蓝253云通讯平台案例

    #!/usr/local/bin/python #-*- coding:utf-8 -*- # Author: jacky # Time: 14-2-22 下午11:48 # Desc: 短信http ...

  4. python设计查询余额程序_【Python】短信验证码平台查询账户余额demo---创蓝253云通讯平台案例...

    #!/usr/local/bin/python #- - coding:utf-8 -- Author: jacky Time: 14-2-22 下午11:48 Desc: 短信http接口的pyth ...

  5. python设计编程体验中心_看着漫画学Python是种怎样的体验?编程从此 变得有趣好学...

    挖掘每一本书那些"值得被看到"的闪光点 你还在枯燥无味地学编程吗? 你还在闷头背诵那些根本没有理解的内容吗? 根本不用那么煎熬!想不想来体验一下翻着漫画就搞定Python的感觉?? ...

  6. python监控linux运行程序_如何在linux/tcl/python中监控正在打开或启动的应用程序?...

    我正在尝试构建一个面板应用程序,类似于avant window navigator或UbuntuUnity.在 我的问题是,一旦我用预先定义好的应用程序构建了面板,当应用程序打开或启动时,如何向面板添 ...

  7. python万年历差农历程序_公历转农历的python实现

    1 #lunar.py 2 # 2015/02/27 罗兵 3 importdatetime4 5 classLunar(object):6 #**************************** ...

  8. python运势预测程序_星座运势查询示例代码

    #!/usr/bin/python # encoding:utf-8 import urllib2, json, urllib # 2.星座运势查询 data = {} data["appk ...

  9. 50行python代码自动生成文章_如何通过50行Python代码获取公众号全部文章

    前言 我们平时阅读公众号的文章会遇到一个问题--阅读历史文章体验不好. 我们知道爬取公众号的方式常见的有两种:通过搜狗搜索去获取,缺点是只能获取最新的十条推送文章.通过微信公众号的素材管理,获取公众号 ...

  10. 50行python游戏代码_使用50行Python代码从零开始实现一个AI平衡小游戏

    使用50行Python代码从零开始实现一个AI平衡小游戏 发布时间:2020-10-23 09:26:14 来源:脚本之家 阅读:74 集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何 ...

最新文章

  1. HDU 6052 To my boyfriend(容斥+单调栈)
  2. shiro---注解
  3. 可怕的乖孩子_当今的中国,有句很可怕的话:所有的乖孩子注定不幸福!
  4. filterreader_Java FilterReader markSupported()方法与示例
  5. Flutter-Cookbook 非官方翻译
  6. 微信内测“群直播”;小米发布第三代屏下相机技术;马斯克宣布脑机接口重大突破 | 极客头条...
  7. 5G 到底是不是伪需求?
  8. 如何删除“无法读源文件或磁盘”的空头文件
  9. FPGA基础知识之主要的FPGA生产厂商介绍
  10. css改火狐滚动条样式_自定义滚动条,可解决火狐滚动条默认样式修改不了问题...
  11. 帆软获取单元格值与赋值
  12. javascript 事件练习:封装兼容性添加、删除事件的函数、addEventListener用法
  13. linux环境下刷机9008,LINUX下线刷修复变砖手机
  14. 高通ISP流程中,ADRC Gain与GTMLTM的对应关系
  15. 多场景双师课堂解决方案
  16. 颜色搭配之BUTTONS 1.0
  17. 在echarts中圆环图中间 自定义图片引入
  18. 提升算法数据结构的几个网站
  19. 需求工程之原型法获取需求
  20. pp模块常用表 sap_SAPpp模块内表..doc

热门文章

  1. JDBC操作数据库的问题总结
  2. The type XXX is not API (restriction on required library 'D:\jdk-64\jre\lib\rt.jar')
  3. Hello Spark! | Spark,从入门到精通
  4. img的属性alt 与 title的区别
  5. 一文读懂质量保证和质量控制
  6. Process.RedirectStandardInput
  7. [藏]常用的匹配正则表达式和实例
  8. 用户、角色、权限管理-设计方案之权限检测
  9. 二、设置开发、运行环境 (基础教程2)
  10. Linux音频驱动-OSS和ALSA声音系统简介及其比较