精华内容
下载资源
问答
  • 在这篇文章中,我将向大家演示怎样向一个通用计算器一样解析并计算一个四则运算表达式。当我们结束的时候,我们将得到一个可以处理诸如 1+2*-(-3+2)/5.6+3样式的表达式的计算器了。当然,你也可以将它拓展的更为强大...
  • 但是,算法仅仅给出了一个笼统的实现策略,对于具体的数据类型、运算操作符及优先级情况、怎样支持函数调用、自定义内存变量如何实现等具体问题并无现成的解决方案,需要开发人员自己实际设计相应的算法解决,而这也...
  • 运行解析器现在我们对于如何让我们的语法运作起来已经有了非常不错的想法了,那就写一个实际的语法来应用一下吧:你可能想要复习一下正则表达式,但不管怎样,这个语法都非常直截了当。让我们用一个表达式来测试一下...

    运行解析器

    现在我们对于如何让我们的语法运作起来已经有了非常不错的想法了,那就写一个实际的语法来应用一下吧:

    d6bc69e8ae2c25c0a495bcfc00468094.png

    你可能想要复习一下正则表达式,但不管怎样,这个语法都非常直截了当。让我们用一个表达式来测试一下吧:

    5344130d5ec3fda9ec2561c7d46dea3f.png

    干得漂亮!

    仔细研究一下这棵树,看看解析器选择了什么层次。

    如果你希望亲自运行这个解析器,并使用你自己的表达式,你只需有Python即可。安装Pip和PlyPlus之后,将上面的命令粘贴到Python内(记得将'...'替换为实际的语法哦~)。

    使树成型

    Plyplus会自动创建一棵树,但它并不一定是最优的。将number放入到mul和将mul放入到add非常有利于创建一个阶层,现在我们已经有了一个阶层那它们反而会成为一个负担。我们告诉Plyplus对它们加前缀去“展开”(i.e.删除)规则。

    碰到一个@常常会展开一个规则,一个#则会压平它,一个?会在它有一个子结点时展开。在这种情况下,?就是我们所需要的。

    401d9da3490dee28d159698cc66f4dca.png

    在新语法下树是这样的:

    897c95dc46ab8ae77402705ca871f203.png

    这样变得简洁多了,我敢说,它是非常好的。

    括号的处理及其他特性

    目前为止,我们还明显缺少一些必须的特性:括号,单元运算符(-(1+2)),及表达式中间允许存在空字符。其实这些特性都很容易就能实现,下面我们来尝试一下。

    需要先引入一个重要的概念:原子。在一个原子里面(括号中及单元运算)发生的所有操作都优先于所有加法或乘法运算(包括位操作)。由于原子只是一个优先级的构造器,并无语法意义,帮我们加上"@"符号以确保在编译时它被能展开。

    允许空格出现在表达式内最简单的方法就是使用这种解释方式:add SPACE add_symbol SPACE mul | mul; 但个解释结果啰嗦且可读性差。所有,我们需要令Plyplus总是忽略空格。

    下面是完整的语法,包容了以上所述特性:

    f4f75d48be7e37e8dca8cd1821851491.png

    请确保理解这个语法再进入下一步:计算!

    运算

    现在,我们已经可以将一个表达式转化成一棵分层树了,只需要逐分支地扫描这棵树,便可得到最终结果。

    我们现在要开始编写代码了,在此之前,我需要对这棵树做两点解释:

    1.每个分支都是包含如下两个属性的实例:

    头(head):规则的名字(例如add或者number);

    尾(tail):包含所有与其匹配的子规则的列表。

    2.Plyplus默认会删除不必要的标记。在本例中,'( ' ,')' 和 '-' 会被删除。但add和mul会有自己的规则,Plyplus会知道它们是必须的,从而不会被删除它们。如果你需要保留这些标记,可以手动关掉这项功能,但从我的经验来看,最好不要这样做,而是手动修改相关语法效果更佳。

    代码

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

    6fd64e35d8df89d47aa93b3509cb423c.png

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

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

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

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

    4c0334111c9266c106512cd0d601ff9c.png

    那么eval()呢?7

    ae7b35b930259517c534f048ccaa479b.png

    成功了:)

    封装

    为了美观,我们把它封装到一个不错的计算器 REPL:

    63e836d05e65e1ec2e1daa770adc76c4.png

    展开全文
  • 是谁说Android没有原生Python了那可是正儿八经的Linux内核,安装齐全了完整POSIX环境后,和一台Linux电脑没有什么区别(硬要说的话,原生的图形是没有的)Android的Termux就是干这个的,只要是有arm的二进制包就能装...

    是谁说Android没有原生Python了

    那可是正儿八经的Linux内核,安装齐全了完整POSIX环境后,和一台Linux电脑没有什么区别(硬要说的话,原生的图形是没有的)

    Android的Termux就是干这个的,只要是有arm的二进制包就能装(都2020年了,哪个还没有似的),没有预编译的也有很多能自己编译

    我在上面装Python有两个用途,一个是装IPython当计算器用,另一个是用you-get下点儿视频

    所以回归正题

    想要用Python做app,最大的障碍有若干个

    第一个是性能。这个真没辙,但你又不是用Python写什么渲染管线,日常简单应用场景下,使用起来问题不大

    第二个是有无成熟的工具链。面向移动的Python gui工具包,成熟的也就是Kivy了,硬要算的话还有一个专门用来写AVG的Ren’Py。如果是要快糙猛操作移动硬件的话,Android上还有个QPython

    第三点是分发。写命令行那种App,分发到PyPi也算分发到移动平台了,不止上面说的Termux,特化一点的QPython也用得上;写实打实的以触摸操作为主的App,发到PyPi不大现实,QPython的gui有是有,但总不能和用户说“去下载QPython”吧;因此最合理的方案是Kivy和Ren’Py这类自带Python环境的东西,这两者都有相对成熟的上架应用,质量上是过关的

    展开全文
  • 【更新】有人说不会使用科大讯飞的语音包。这里是传送门,能够參考从零系列的前四篇文章 ...本文主要介绍怎样利用语音包实现口语控制打开应用程序,比如:说“打开计算器”,计算器就彭地打开了...

    【更新】有人说不会使用科大讯飞的语音包。这里是传送门,能够參考从零系列的前四篇文章

    (一)利用科大讯飞语音包实现Android语音识别Demo

    (二)科大讯飞语音包Mscdemo的使用

    (三)自己定义类中调用讯飞语音包错误解决的方法

    (四)运用Handler另起线程执行科大讯飞语音识别

    本文主要介绍怎样利用语音包实现口语控制打开应用程序,比如:说“打开计算器”,计算器就彭地打开了。

    要完毕这个功能,首先要识别出指令是“打开",然后识别出应用程序名称是”计算器“。这些工作都交给科大讯飞语音包的语义理解模块完毕。

    我们要做的,首先是把已安装的应用程序的名称和包名保存下来,由于启动一个应用程序须要它的包名(PackageName)和类名(ClassName)。

    List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);
    		for (PackageInfo pi : packages){
    			InstalledAppMap.put(pi.applicationInfo.loadLabel(getPackageManager()).toString(),
    					pi.packageName);
    		}

    第二,我们须要通过应用程序名找到向相应的包名。应用程序名靠语音包解析返回的Json获取,一般语义理解返回的结构是这种

    String str = "{\"semantic\": {\"slots\": {\"name\": \"计算器\"" +
    "}},\"rc\": 0,\"operation\": \"LAUNCH\",\"service\": \"app\","+ 
     "\"text\": \"打开计算器\"}";

    \"就是Java中String内容中的转义引號,你懂得。然后我写了一个方法专门依据SlotItem获取SlotValue,比較简单就不贴了,非常easy得到应用名为”计算器“。

    第三步就是通过包名获得类名,这里用到了ResolveInfo类。

    				String AppName = Utils.GetValueGivenSlot(tmpString, "name");
    				if (AppName.equals(""))
    					Log.e(Const.LAUNCHAPP_TAG,"App name can not be recongnized");
    				Intent Newintent = new Intent();
    				Intent resolveIntent = new Intent(Intent.ACTION_MAIN,null);
    				resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    				String packageName = InstalledAppMap.get(AppName);
    				resolveIntent.setPackage(packageName);
    				List<ResolveInfo> apps = 
    						getPackageManager().queryIntentActivities(resolveIntent, 0);
    				ResolveInfo ri = apps.iterator().next();
    				if (ri!=null){
    					String className = ri.activityInfo.name;
    					Newintent.setComponent(new ComponentName(packageName,className));
    				}
    				startActivity(Newintent);

    Utils.GetValueGivenSlot(tmpString, "name")//这是我自己写的方法
    转载请注明出处,谢谢咯!


    展开全文
  • 每个人使用电脑都会安装各种应用程序,其实从最早的Windows直到现在的Win7,开始菜单的“附件”一栏中就已经为我们内置了很多方便实用的小工具,比如我们熟悉的画图、计算器等等。不知你有没有遇到过这样的情况,某...

           每个人使用电脑都会安装各种应用程序,其实从最早的Windows直到现在的Win7,开始菜单的“附件”一栏中就已经为我们内置了很多方便实用的小工具,比如我们熟悉的画图、计算器等等。不知你有没有遇到过这样的情况,某一天,想打开计算器,突然发现Win7开始菜单附件中的小工具全都不见了,怎样才可以找回它们呢?

          出现这样的问题,一般是因为执行部分优化操作或是中病毒后,系统出问题了,才导致开始菜单功能表中的快捷方式丢失的。所以只要程序本身并没有被删除,就可以通过命令调用相关工具。

          在开始菜单中,单击“运行”。

          在命令栏中键入命令以调用相关工具。例如键入mspaint,调用画图工具。

          计算器 calc

          记事本 notepad

          写字板 wordpad

          截图工具 snippingtool

          便签 stikynot

          用命令调用工具毕竟只是权宜之计。为了以后使用方便,最好还是从别的正常工作的计算机上复制一份开始功能表捷径,放到自己机器上。

          在地址栏中输入路径:%systemdrive%/ProgramData/Microsoft/Windows/Start Menu/Programs

          复制附件文件夹。然后回到自己计算机上,沿着同样的路径将附件文件夹覆盖粘贴过来,替换原来出错的文件夹。

          以上步骤已经全部好了,现在再打开开始菜单,看看附件项目是否已经恢复?

     

    XP系统之家是一个专业的系统下载网站,而且系统我们进行了分类,Win7系统XP系统,不仅如此,为了方便用户在装系统的时候遇到问题,我们还专门整理了系统常见的问题栏目帮助大家解决问题,我们还把版本分为了装机版系统,纯净版系统,方便大家找到适合自己的系统,需要下载系统找系统就上XP系统下载网www.7gyy.com

    展开全文
  • 6.屏幕偷拍间谍:能够在后台每隔5分中进行屏幕偷拍,悄悄查看别人怎样使用我的电脑。 (九)系统工具 包括:1)系统维护工具;2)系统进程管理;3)系统垃圾清理:4)系统右键设置:5)系统配置程序等. 王牌超级工具...
  • 第1章介绍JSP重要性,对Tomcat服务器的安装与配置给予了详细介绍。第2章讲解JSP页面的基本构成、常用的JSP标记。第3章讲解内置对象,特别强调了这些内置对象在JSP应用开发中的重要性,结合实例使读者掌握内置对象的...
  • autoJS1688示例.zip

    2020-05-06 14:37:55
    1怎样动态增加text标签.js 1截图脚本.js 1提取QQ收藏完整内容.js 1改变字体颜色大小和内容.js 1易码获取短信.js 1查询本机IP地理位置.js 1比1比4悬浮窗可限制显示行数.js 1求交集.js 1爬取bilibili视频弹幕...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    1.2 组件安装 4 0005 安装ActiveX组件 4 0006 安装不同类型的第三方组件 5 0007 在Delphi中加载QReport报表组件 7 1.3 创建DLL文件 8 0008 生成一个DLL文件 8 0009 调用DLL文件 8 1.4 窗体相关操作 ...
  • 程序开发范例宝典>>

    2012-10-24 10:41:28
    实例199 语音计算器 284 5.5 多媒体应用 286 实例200 开机祝福程序 286 实例201 制作家庭影集 287 实例202 产品电子报价 288 实例203 产品滚动展示程序 290 实例204 将图片资源添加到EXE里 291 ...
  • 实例265 怎样调用外部的EXE文件 361 实例266 关闭外部已开启的程序 362 7.10 程序运行 363 实例267 防止程序多次运行 363 实例268 程序运行时禁止关机 364 实例269 获取任务栏尺寸大小 365 实例270 ...
  • 实例265 怎样调用外部的EXE文件 361 实例266 关闭外部已开启的程序 362 7.10 程序运行 363 实例267 防止程序多次运行 363 实例268 程序运行时禁止关机 364 实例269 获取任务栏尺寸大小 365 实例270 ...
  • 实例265 怎样调用外部的EXE文件 361 实例266 关闭外部已开启的程序 362 7.10 程序运行 363 实例267 防止程序多次运行 363 实例268 程序运行时禁止关机 364 实例269 获取任务栏尺寸大小 365 实例270 改变系统提示信息...
  • C#程序开发范例宝典(第2版).part02

    热门讨论 2012-11-12 07:55:11
    一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面...实例265 怎样调用外部的EXE文件 361 实例266 关闭外部已开启的程序 362 7.10 程序运行 363 实例267 防止程序多次运行 363 实例...
  • C#程序开发范例宝典(第2版).part13

    热门讨论 2012-11-12 20:17:14
    一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面...实例265 怎样调用外部的EXE文件 361 实例266 关闭外部已开启的程序 362 7.10 程序运行 363 实例267 防止程序多次运行 363 实例...
  • 一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面...实例265 怎样调用外部的EXE文件 361 实例266 关闭外部已开启的程序 362 7.10 程序运行 363 实例267 防止程序多次运行 363 实例...
  • 一部久享盛誉的程序开发宝典。精选570个典型范例,全面覆盖实用和热点技术,涉及面...实例265 怎样调用外部的EXE文件 361 实例266 关闭外部已开启的程序 362 7.10 程序运行 363 实例267 防止程序多次运行 363 实例...
  • 15) 下拉式计算器.....................................................................................................28 16) 鼠标移到某个单元格,指针形状改变...............................................
  • Visual C++ 2008入门经典--详细书签版

    热门讨论 2013-02-02 16:07:15
    6.8.2 CLR版本的计算器程序 277 6.9 小结 283 6.10 练习 283 第7章 自定义数据类型 285 7.1 C++中的结构 285 7.1.1 结构的概念 286 7.1.2 定义结构 286 7.1.3 初始化结构 286 7.1.4 访问结构的成员 287 ...
  • 6.8.2 CLR版本的计算器程序 277 6.9 小结 283 6.10 练习 283 第7章 自定义数据类型 285 7.1 C++中的结构 285 7.1.1 结构的概念 286 7.1.2 定义结构 286 7.1.3 初始化结构 286 7.1.4 访问结构的成员 287 ...

空空如也

空空如也

1 2
收藏数 22
精华内容 8
关键字:

怎样安装计算器