版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
+硬件趣学Python编程
揭开程序的面纱,认识Python的世界牛艾科技目录ContentsSuccessWords2第二部分Skids开发板简介第三部分配套开发工具及使用说明第四部分Skids文件结构第五部分第一个Python程序第一部分认识Python目录ContentsSuccessWords3第一部分认识Python4认识PythonPython语言是一种解释型、面向对象、动态数据类型的高级程序设计语言Python语言是数据分析师的首选数据分析语言,也是智能硬件的首选语言数据分析创建复杂的Web应用程序游戏开发动画电影效果……网站开发智能硬件开发5认识PythonGuido
van
Rossum于1989年在荷兰国家数学和计算机科学研究所设计出来的Python(蟒蛇)作为程序的名字,是因为Guido
van
Rossum是BBC电视剧——蒙提·派森的飞行马戏团(MontyPython'sFlyingCircus)的爱好者BBC
“MontyPython‘sFlyingCircus”(蒙提·派森的飞行马戏团)GuidovanRossum(人称“龟叔”)6认识Python优点一:优雅、简单、明确(减少花哨、晦涩或以“炫技”为目的的代码)让数据分析师们摆脱了程序本身语法规则的泥潭,更快的进行数据分析C语言Python语言7认识Python优点二:强大的标准库完善的基础代码库,覆盖了网络通信、文件处理、数据库接口、图形系统、XML处理等大量内容,被形象地称为“内置电池”(batteriesincluded)优点三:良好的可扩展性大量的第三方模块,覆盖了科学计算、Web开发、数据接口、图形系统等众多领域,开发的代码通过很好的封装,也可以作为第三方模块给别人使用。如Pandas、Numpy、Seaborn、Scikit-learn等等优点四:免费、开源8认识PythonPython语言是一种解释型、面向对象、动态数据类型的高级程序设计语言9认识Python集成开发环境目录ContentsSuccessWords10第二部分Skids开发板介绍11什么是SkidsSkids是由沈阳牛艾科技有限公司自主研发的、高度集成的、用于教学领域的手持智能终端采用高性能单片机系统做为控制核心,集成了Python开发环境和硬件支撑库,可以让Python编程教学变得更简单提高学生的学习兴趣,降低物联网、嵌入式、软件工程、电子工程、通信等各类专业的教学入门难度12Skids开发板简介开发板正面开发板背面13Skids的供电Skids支持两种方式的供电通过USB接口供电采用电池供电学习或开发过程,推荐使用USB接口来供电14配套资源Skids提供了全面的课程体系和丰富的教学资源,包括PPT课件、技术文档、源代码和微课堂等15涵盖的课程体系课程名称课程内容Python程序设计主要讲解Python语法基础,程序结构和常用函数等,并基于Skids进行程序讲解和演示微处理器与单片机介绍微处理器体系结构、工作原理和应用;讲解单片机的硬件结构、指令系统、定时器、中断系统、外部接口、调试技术等,并基于Skids讲解单片机应用系统的设计与基于Python进行单片机开发。电路基础讲述电路的基本概念和基础知识,以及电路分析的理论和方法,初步掌握电路设计的思路,并安排学生进行Skids的电路分析。面向对象程序设计基于俄罗斯方块、贪吃蛇等小游戏,讲解面向对象程序设计的思想,类、封装、继承的概念及相应的Python实现网络通信介绍TCP/IP网络架构和工作流程,并讲解WIFI通信协议的原理和应用;通过Skids介绍并演示TCP/IP网络的Socket通信的原理和Python代码实现。计算机体系结构结合Skids设备,讲解计算机的基本设计思想和由此产生的逻辑结构、工作原理等,并介绍软硬部件的结构及各部件之间的相互关系。课程设计/生产实训基于Skids开发板,可以很方便的进行课程设计,例如实现一款小游戏或一个物联网设备。此外,Skids能够提高开发效率,提升项目开发速度
,可以用于创新大赛、电子设计大赛及大学生毕业设计等16适用的专业领域物联网、嵌入式相关专业软件工程、通信、电子相关专业需要具有一定编程基础的专业所有需要参加Python国家计算机二级考试的专业17Skids的硬件配置处理器为双核32位MCU,主频高达230MHz,计算能力可达600DMIPS集成了WIFI和蓝牙功能;并可以扩展支持Zigbee协议搭配了2.8寸高清液晶屏集成了4个用户按键提供了MicroUSB接口,可以很方便的与PC连接提供了3.5mm音频接口提供了TF卡插槽,支持TF卡独特的电源管理和低功耗技术确保设备适用于各种物联网应用场景目录ContentsSuccessWords18第三部分配套开发工具及使用说明19Skids连接PCSkids无需额外的调试器,Skids开发板的USB接口在侧面,通过USB线连接至PC即可Skids通过USB线连接至PC后,开启电源开关(向上拨开关),设备上电启动,屏幕点亮20Skids连接PCSkids连接至PC后,会自动进行驱动安装,无需人为操作安装完驱动后,在设备管理器中会出现相应的串口,如图所示:21Skids开发环境Skids集成了Python解释器和驱动库,开发简单、使用方便,无需搭建复杂的交叉开发环境,可实现学生的快速入门Skids只需要一个名为uPyCraft的工具即可进行代码编辑、下载和运行uPyCraft是一个可运行在Windows/MacOS平台的PythonIDE,界面简洁,操作便利,适合新手的学习和使用。uPyCraft内置了许多基础操作库,为众多的Python爱好者提供了一个简单实用的集成开发环境22uPyCraft的下载uPyCraft的下载地址:/DFRobot/uPyCraft/master/uPyCraft.exe23uPyCraft的运行uPyCraft为绿色版软件,直接运行即可,无需安装uPyCraft使用monaco编程字体,如果系统中没有这个字体,会弹出对话框提示安装,点击OK进行安装字体库或者选择Cancel取消安装均可24uPyCraft的主界面目录树编辑区终端框工具栏菜单栏25uPyCraft的主界面主界面共包含了5个区域:菜单栏、目录树、编辑区、终端框和工具栏目录树在整个界面的左侧,可以通过不同的文件目录来管理文件,包括目录device,sd,uPy_lib,workSpace等。其中device:显示已连接上的开发板上存在的文件sd:目前版本尚未支持uPy_lib:显示IDE自带的库文件workSpace:用户自定义目录,保存用户自己的文件26uPyCraft的主界面终端框在界面的下方,用于命令行的执行,显示程序执行的信息,显示提示信息,如果有错误则显示错误信息等
终端框相当于远程登录到了Skids上,可以在里面输入代码来直接运行27uPyCraft的主界面菜单栏在界面的上方,包含了uPyCraft的所有操作编辑窗口用于代码编辑,用户在这个区域中可以编辑修改文件,一般源程序的编辑及修改都在这个窗口完成。其顶部是文件标签,显示当前打开了哪些文件,将鼠标停留在文件名上可以查看它的保存位置。在编辑窗口点击鼠标右键可对文件内容进行复制,粘贴等操作工具栏在界面的最右侧,提供最常用的快捷操作以便于用户使用28通过uPyCraft访问Skids设备1)通过USB将Skids连接到PC2)在uPyCraft的主菜单上,选择Tools->Serial,选中对应的串口即可29通过uPyCraft访问Skids设备3)连接成功后,串口号前面会出现一个对号4)同时,在左侧目录树中的Device选项,前面会出现小箭头,点击可显示Skids中的文件列表30Skids的固件1)为了确保Skids正常运行,需要为Skids烧录固件2)
Skids出厂时会统一烧录固件。但如果升级或者修复固件,则需要通过uPyCraft重新为Skids烧录固件3)Skids的固件为二进制文件,通常命名为firmware.bin31通过uPyCraft烧录固件1)在uPyCraft的主菜单上,选择Tools->BurnFirmware2)烧录固件对话框将被弹出,在burn_addr选项中选择0x1000,在FirmwareChoose选项中选中Users,点击Choose按钮,从本地目录中选择要烧录的固件32通过uPyCraft烧录固件3)选中待烧录的固件后,点击OK将开始烧录固件,并弹出如下窗口显示进度:4)固件烧录完成后,该窗口自动关闭,返回uPyCraft主界面;同时,Skids设备将自动重启5)Skids重启后会与uPyCraft断开连接,用户重新在主菜单Tools->Serial中选择对应的串口进行连接33运行Python文件如果要执行Skids上的某个Python文件,选中该文件后,点击鼠标右键,在弹出菜单中选择Run,即可执行该文件34运行Python文件如果要执行PC本地的某个Python文件可以用以下方法将该文件拖拽到device下可以直接下载到Skids上并自动运行将该文件拖拽到uPyCraft的编辑区,然后选择Tools->DownloadAndRun或点击右侧工具栏的DownloadAndRun按钮即可如上图所示,main.py文件将被下载到Skids并执行;在Device列表中可以看到main.py文件(因为已经被下载Skids上),最好是在workspace中下载运行需要执行的py。35运行Python文件如果要执行PC本地的某个Python文件,选中该文件后,也可以直接将文件拖拽至device列表中,则该文件会被自动下载到Skids然后在device的文件列表中,选中该文件,在鼠标右键的弹出菜单中选择Run即可执行该文件36终止Python文件的运行如果终止正在运行的Python程序,则点击右侧工具栏的Stop按钮即可37uPyCraft的语法检查代码编辑完后可以点击工具栏的SyntaxCheck按钮对程序进行语法检查(注意:只会检查语法,不会对程序逻辑做检查),并可在终端框中看到打印信息。如果程序语法正确,则只打印“syntaxfinish”信息,否则还会打印出错误信息,目录ContentsSuccessWords38第四部分Skids文件结构39Skids的主要文件boot.py:开发板启动时将执行这个该脚本,通常在该脚本中设置开发板的主要参数。main.py:python主程序的脚本文件,在boot.py运行后被执行。如果main.py不存在,则boot.py执行完成后,MCU处于空闲状态其它Python文件
:python程序文件,由main.py调用运行或者通过uPyCraft手动运行40设置Skids的开机启动程序假定Skids开机后要自动执行snake.py选择Device列表中的snake.py,在鼠标右键弹出菜单中选择Rename在弹出的对话框中将文件名改为main.py,然后点击OK切换Skids电源开关,重启启动Skids41开机启动贪吃蛇游戏目录ContentsSuccessWords42第五部分第一个Python程序43Skids的在线开发作为一个快捷开发平台,Skids支持程序的在线编写和执行通过uPyCraft,可以很方便地在Skids环境下进行Python程序开发和运行,以及查看运行结果uPyCraft支持两种方式的程序开发:创建扩展名为.py的文件,编写程序,将文件下载到Skids并执行在终端框中输入代码行,按回车键直接运行对于小程序或者进行代码调试与验证,推荐在终端框中直接输入代码的方式44Skids的帮助信息在终端框中输入Help(),则会显示Skids的帮助信息45在Skids上运行第一个Python程序在uPyCraft的终端框上输入如下语句:可以直接看到程序的执行结果:46思考在Skids上,通过新增.py文件来写一个Python程序,并运行该程序将一个Python程序设置为在Skids启动后自动执行将一个本地的Python程序文件传到Skids设备上,并运行该程序++++THANKYOU牛艾科技+硬件趣学Python编程
走遍世界都不怕,各国国旗Python画牛艾科技目录ContentsSuccessWords49第一部分认识变量第二部分第三部分Python的绘制图形库turtle第四部分画国旗的实例讲解第五部分画国旗的基本原理数据类型目录ContentsSuccessWords50第五部分认识变量51认识变量用来存储一些之后可能会变化的值对科比投篮ID为1的一次投篮进行分析,那么我们就可以创建一个名称为shot_id的变量,并且将1值储存在变量shot_id中如果之后我们想要分析科比的另外一次投篮,比如投篮ID为2的投篮,我们只需要修改变量shot_id的赋值,将shot_id赋值为2即可52认识变量变量名必须是大小写英文字母、数字或下划线_
的组合,不能用数字开头,并且对大小写敏感关键字不能用于命名变量(31个),如and、as、assert、break、class、continue、def、del等53关键字关键字是Python里事先定义的,有特别意义的标识符,有时又叫保留字,是特别意义的变量。anddelfromnotwhileaselifglobalorwithassertelseifpassyieldbreakexceptimportprintclassexecinraisecontinuefinallyisreturndefforlambdatry54认识变量通过赋值运算符=变量名和想要赋予变量的值连接起来,变量的赋值操作就完成了声明和定义的的过程,在其他语言中需要制定类型;同一变量可以反复赋值,而且可以是不同类型的变量,这也是Python语言称之为动态语言的原因55认识变量常量表示“不能变”的变量Python中是没有常量的关键字的,只是我们常常约定使用大写字母组合的变量名表示常量,也有不要对其进行赋值”的提醒作用56认识变量如同我们在看书时做笔记一样Python语言会通过注释符号识别出注释的部分,将它们当做纯文本,并在执行代码时跳过这些纯文本在Python语言中,使用#进行行注释多行注释使用连续单个单引号或者双引号目录ContentsSuccessWords57第二部分数据类型58数据类型Python的数据类型主要包括数值类型、字符串类型、布尔类型、列表类型、字典类型和元组类型。12数值类型字符串类型布尔类型359数值类型Python的常规数值类型包括整数、浮点数、长整型、有虚部的复数等。①整数类型示例a=15b=15*4+20-10c=15/3print(a,b,c)运行结果:15705.0②浮点数类型示例a=15.8b=15.8*20print(a,b)运行结果:15.8316.060数值类型Python的常规数值类型包括整数、浮点数、长整型、有虚部的复数等。③长整型类型示例④复数类型示例a=3457475b=45555000c=a+bprint(a,b,c)运行结果:34574754555500049012475a=1.5+0.5jb=a.realc=a.imagprint(a,b,c)运行结果:(1.5+0.5j)1.50.561布尔类型布尔型(bool)只有True和False两种值。比较运算和条件表达式都会产生True或False空值或者None(Python中类似其它语言Null或者Nil的值)都会被认为是False,而其它情形则被认为是True。a=bool('')b=bool('hello')c=Noned=bool(c)e=bool(1)print(a,b,c,d,e)运行结果:FalseTrueNoneFalseTrue目录ContentsSuccessWords62第三部分Python的绘制图形库turtle63海龟绘图Python内置了一个简单的绘图工具:海龟绘图(TurtleGraphics),我们借助它可以画出各种各样的图形。turtle库是Python的内部库,使用导入即可:importturtle
(注:在MicroPython中是uturtle,使用导入:importuturtle)64画布画布是turtle为我们展开用于绘图的区域,我们可以设置它的大小和初始位置。设置画布大小:turtle.screensize(canvwidth=None,canvheight=None,bg=None)参数分别为画布的宽(单位像素),高,背景颜色例如:turtle.screensize(800,600,"green")turtle.screensize()#返回默认大小(400,300)65画笔画笔的状态在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。描述小乌龟时使用两个词语:坐标原点(位置)、面朝x轴正方向(方向)。turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态画笔的属性turtle.pensize()#设置画笔的宽度;turtle.pencolor()#没有参数传入,返回当前画笔颜色;传入参数设置画笔颜色,可以是字符串如"green","red",也可以是RGB3元组;turtle.speed(speed)#设置画笔移动速度,画笔绘制的速度范围是[0,10]整数,越大越快。66画笔绘图命令67画笔绘图命令68画笔绘图命令69画笔绘圆命令详解turtle.circle(radius,extent=None,steps=None)描述:以给定半径画圆参数:radius(半径):半径为正(负),表示圆心在画笔的左边(右边)画圆;extent(弧度)(optional);steps(optional):做半径为radius的圆的内切正多边形,多边形边数为steps。举例:turtle.circle(50)#整圆turtle.circle(50,steps=3)#三角形turtle.circle(120,180)#半圆目录ContentsSuccessWords70第四部分画国旗的基本原理71要点搜索各国国旗图片,了解其设计理念和设计规则;导入turtle库,使用turtle的各种绘图指令根据国旗规则进行绘制;skids开发板板载屏幕大小为240x320,根据缩放比例关系将绘制出的国旗在屏幕上完美地显示出来。72原理importuturtleturtle=uturtle.Turtle()演示画线段turtle.forward(100)前进100步角度turtle.right(90)右转90°turtle.left(-30)左转-30°=右转30°来回走两步73原理绘制原理(德国国旗)国旗规则比例是为100:60=5:3三个等高矩形,颜色是黑红金三色。黑色象征勤勉与力量,红色象征国民的热情,金色代表重视荣誉画一个矩形前进100,转90°,再前进20……得到一个黑色的矩形框turtle.home()#回到原点turtle.forward(100)turtle.right(90)turtle.forward(20)turtle.right(90)turtle.forward(100)turtle.right(90)turtle.forward(20)74原理绘制原理(德国国旗)填充颜色turtle.color('red','red')#设置边框颜色和填充颜色turtle.begin_fill()#开始填充#画矩形turtle.end_fill()#结束填充画三个矩形并填充有什么不同?大小都相同位置、颜色不同做一个函数(封装相似的功能)函数(defrect)参数(位置、左上角坐标、颜色)defrect(x,y,color):turtle.goto(x,y)turtle.color(color,color)turtle.begin_fill()turtle.forward(100)turtle.right(90)turtle.forward(20)turtle.right(90)turtle.forward(100)turtle.right(90)turtle.forward(20)turtle.end_fill()
75原理绘制原理(德国国旗)turtle.home()rect(0,60,'black')rect(0,40,'red')rect(0,20,'gold')海龟没有转头turtle.setheading(0)#永远成0度角defrect(x,y,color):turtle.goto(x,y)turtle.setheading(0)turtle.color(color,color)目录ContentsSuccessWords76第五部分画国旗的实例讲解77法国国旗比例2:3蓝白红三色纵旗。代表法国的的国家铭言「自由、平等、博爱」学生做好以后提问:能不能改进rect函数,加入右下角的坐标作为参数defrect(x,y,color,x2,y2):width=x2-x#横坐标,右比左大height=y-y2#纵坐标,上比下大width=abs(x2-x)#直接取绝对值height=abs(y2-y)78法国国旗importuturtleturtle=uturtle.Turtle()defrect(x,y,color,x2,y2):width=abs(x2-x)height=abs(y2-y)turtle.pencolor(color)turtle.penup()turtle.goto(x,y)turtle.pendown()turtle.setheading(0)turtle.fillcolor(color)turtle.begin_fill()turtle.fd(width)turtle.right(90)turtle.forward(height)turtle.right(90)turtle.forward(width)turtle.right(90)turtle.forward(height)turtle.end_fill()deffrance():rect(-120,160,'black',120,-160)rect(-75,50,'blue',-25,-50)rect(-25,50,'white',25,-50)rect(25,50,'red',75,-50)turtle.clear()turtle.speed(0)#turtle.delay(0)france()79捷克国旗国旗特征比例2:3蓝色三角及白红两色横旗,顶角至旗帜一半白色代表摩拉维亚,红色代表波希米亚,蓝色代表斯洛伐克,三角形象征喀尔巴阡山代码实现rect(-120,160,'gray',120,-160)rect(-75,50,'white',75,0)rect(-75,0,'red',75,-50)turtle.home()turtle.begin_fill()turtle.color('blue','blue')turtle.goto(-75,50)turtle.goto(-75,-50)turtle.goto(0,0)turtle.end_fill()80巴勒斯坦国旗国旗特征比例1:2左边红色三角形的黑白绿三色横旗。原为巴勒斯坦解放组织于1964年采用的会旗。由于约旦境内有60%的人口为巴勒斯坦人,故两国国旗十分相似。红色代表巴勒斯坦革命,白色代表革命的纯洁和坚定,黑色象征奋斗建国的历史与死亡,绿色代表伊斯兰教的信仰,也代表和平。由于该国尚未完全独立,所以将黑色置上。代码实现turtle.reset()turtle.speed(0)#turtle.delay(0)rect(-120,160,'gray',120,-160)rect(-72,36,'black',72,12)rect(-72,12,'white',72,-12)rect(-72,-12,'green',72,-36)turtle.penup()turtle.goto(-27,0)turtle.pendown()turtle.begin_fill()turtle.color('red','red')turtle.goto(-72,36)turtle.goto(-72,-36)turtle.goto(-27,0)turtle.end_fill()81瑞士国旗国旗特征比例1:1红底正方形,中央有白色正十字。设计源自施维茨州的标志。自从1240年施维茨州人民使用该旗为战旗来反抗哈布斯堡王室统治时后,瑞士各势力在战争时常常以此旗为军旗。该面旗帜逐渐成为瑞士民族自由解放的象征,最后成为瑞士国旗。代码实现turtle.reset()turtle.speed(0)#turtle.delay(0)rect(-120,160,'gray',120,-160)rect(-75,75,'red',75,-75)rect(-50,12,'white',50,-12)rect(-12,50,'white',12,-50)82瑞典国旗国旗特征比例5:8蓝底黄十字的旗帜,金十字代表瑞典福尔孔王朝中的金色十字架。1157年瑞典国王埃里克九世于远征芬兰前向神祷告,突然看到如同金色十字架的光芒横越青空,后来成为现在的国旗。代码实现turtle.reset()turtle.speed(0)#turtle.delay(0)rect(-120,160,'gray',120,-160)rect(-100,62,'blue',100,-62)rect(-100,12,'yellow',100,-12)rect(-36,62,'yellow',-12,-62)83日本国旗国旗特征比例2:3白底,中央紅日圆的直径占宽度的60%先画白色矩形100:150—rect(0,100,'white',150,0)但是不明显,所以先把整个屏幕涂成灰色—rect(0,320,'gray',240,0)代码实现turtle.reset()turtle.speed(0)#turtle.delay(0)height=100width=100*3/2rect(-120,160,'gray',120,-160)rect(-width/2,height/2,'white',width/2,-height/2)r=height*0.6/2turtle.penup()turtle.home()turtle.forward(r)turtle.pendown()turtle.begin_fill()turtle.setheading(90)turtle.color('red','red')turtle.circle(r)turtle.end_fill()84越南国旗国旗特征比例2:3为红底,中央黄星的旗帜。红色表示革命和胜利。金星代表越南共产党,五个角分别表示工人、农民、士兵、知识分子和青年。五角星,顶角36°,钝角108°(五星永远差72°)代码实现turtle.reset()turtle.speed(0)#turtle.delay(0)rect(-120,160,'gray',120,-160)rect(-75,50,'red',75,-50)turtle.penup()turtle.goto(-25,10)turtle.pendown()turtle.setheading(0)turtle.pencolor("yellow")turtle.fillcolor("yellow")turtle.begin_fill()foriinrange(5):turtle.forward(50)turtle.right(144)turtle.end_fill()85中国国旗国旗特征比例2:3红底,左上角有大五角黄星与四颗小五角黄星的旗帜。红色代表革命(血)。黄色是为着在红地上显出光明。大五角黄星代表中国共产党,四颗小五角黄星代表中国人民的四个阶级:工人阶级、农民阶级、小资产阶级和民族资产阶级。四星环绕大星象征中国共产党领导下的革命人民大团结86中国国旗国旗特征87中国国旗代码实现importuturtleturtle=uturtle.Turtle()defdraw_rect(x1,y1,color,x2,y2):width=abs(x2-x1)height=abs(y2-y1)turtle.penup()turtle.goto(x1,y1)turtle.pendown()turtle.setheading(0)turtle.color(color,color)turtle.begin_fill()foriinrange(2):turtle.forward(width)turtle.right(90)turtle.forward(height)turtle.right(90)turtle.end_fill()defdraw_star(center_x,center_y,radius,color):turtle.penup()pt1=turtle.pos()turtle.circle(-radius,72)pt2=turtle.pos()turtle.circle(-radius,72)pt3=turtle.pos()turtle.circle(-radius,72)pt4=turtle.pos()turtle.circle(-radius,72)pt5=turtle.pos()turtle.pendown()turtle.color(color,color)turtle.begin_fill()turtle.goto(pt3)turtle.goto(pt1)turtle.goto(pt4)turtle.goto(pt2)turtle.goto(pt5)turtle.end_fill()88中国国旗defstar(center_x,center_y,radius,big_center_x,big_center_y):turtle.penup()turtle.goto(center_x,center_y)turtle.pendown()turtle.left(turtle.towards(big_center_x,big_center_y)-turtle.heading())ifcenter_x==big_center_x:turtle.forward(radius+1)else:turtle.forward(radius)turtle.right(90)draw_star(turtle.pos().x,turtle.pos().y,radius,'yellow')turtle.reset()turtle.speed(0)width=180height=120draw_rect(-width/2,height/2,'red',width/2,-height/2)pice=width/30big_center_x=-width/3big_center_y=height/4star(big_center_x,big_center_y-1,pice*3,big_center_x,big_center_y)star(-width/6,height*2/5,pice,big_center_x,big_center_y)star(-width/10,height*3/10,pice,big_center_x,big_center_y)star(-width/10,height*3/20,pice,big_center_x,big_center_y)star(-width/6,height/20,pice,big_center_x,big_center_y)++++THANKYOU牛艾科技+硬件趣学Python编程
数学计算最基本,制作简单计算器牛艾科技目录ContentsSuccessWords91第一部分字符与字符串第二部分运算符和表达式运算符和表达式第四部分计算器的基本原理第五部分计算器的代码实现第三部分类型转换目录ContentsSuccessWords92第一部分字符与字符串93字符串类型字符串是字符的集合。①单字符使用方法示例a='m'b='a'c='n'd=a+b+cprint(a,b,c,d)运行结果:manman94字符串类型字符串是一个字符序列,序列中的元素包含了一个从左到右的顺序序列。字符串最左端位置标记为0,依次增加。字符串中的编号叫做“索引”②字符串使用方法与单字符相同。(注:’’或””对字符内容没有影响)a="butter"b='fly'c=a+bprint(a,b,c)运行结果:butterflybutterfly95字符串类型转义字符:字符串里常常存在一些如换行、制表符等有特殊含义的字符,这些字符称之为转义字符比如\n表示换行,\t表示制表符,Python还允许用r“”表示“”内部的字符串默认不转义转义字符代表含义\(在行尾时)反斜杠符号\\反斜杠符号\"双引号\b退格\e转义\000空\n换行\v纵向制表符\t横向制表符\r回车\f换页\oyy八进制数,yy代表的字符\oxy十六进制数,yy代表的字符\other其他的字符以普通格式输出96字符串输出在Python3.x版本中,print函数为带括号的print()如果想要看变量的值,则直接在print后面加上变量名即可。如果是想要输出提示信息,如一句话,那我们需要将提示信息用‘单引号包裹起来(这使得内容构成一个字符串)使用逗号,隔开变量与其他剩余内容,则print在输出时会依次打印各个字符串或变量,遇到逗号,时会输出一个空格97字符串输出在程序中,看到了%这样的操作符,这就是Python中格式化输出符号描述%c格式化字符及其ASCII码%s格式化字符串%d格式化整数%u格式化无符号整型%o格式化无符号八进制数%x格式化无符号十六进制数%X格式化无符号十六进制数(大写)%f格式化浮点数字,可指定小数点后的精度%e用科学计数法格式化浮点数%E作用同%e,用科学计数法格式化浮点数%g%f和%e的简写%G%f和%E的简写%p用十六进制数格式化变量的地址98字符串输入Python3提供了input函数从标准输入读取一行文本,默认的标准输入是键盘input取得的值的类型都是字符串,即使输入的是数字,存入变量的也是字符串类型。99字符串输入切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。切片的语法:[起始:结束:步长]注意:选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身)。目录ContentsSuccessWords100第二部分运算符和表达式101运算符和操作数编写的大多数语句(逻辑行)都包含表达式。一个简单的表达式例如2+3。一个表达式可以分解为运算符和操作数。运算符的功能是完成某件事,它们由如“+”这样的符号或者其他特定的关键字表示。运算符需要数据来进行运算,这样的数据被称为操作数。在这个例子中,2和3是操作数。在Python中,表达式可以作为语句,但表达式结果不会存储。102运算符及其用法运算符名称说明例子+加两个对象相加3+5得到8。'a'+'b'得到'ab'。-减得到负数或是一个数减去另一个数-5.2得到一个负数。50-24得到26。*乘两个数相乘或是返回一个被重复若干次的字符串2*3得到6。'la'*3得到'lalala'。**幂返回x的y次幂3**4得到81(即3*3*3*3)/除x除以y4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333//取整除返回商的整数部分4//3.0得到1.0%取模返回除法的余数8%3得到2。-25.5%2.25得到1.5<<左移把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1)2<<2得到8。——2按比特表示为10>>右移把一个数的比特向右移一定数目11>>1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5。103运算符及其用法运算符名称说明例子&按位与数的按位与5&3得到1。|按位或数的按位或5|3得到7。^按位异或数的按位异或5^3得到6~按位翻转x的按位翻转是-(x+1)~5得到6。运算符名称说明例子not布尔“非”如果x为True,返回False。如果x为False,它返回True。x=True;noty返回False。and布尔“与”如果x为False,xandy返回False,否则它返回y的计算值。x=False;y=True;xandy,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False(因为x是False)。这个现象称为短路计算。or布尔“或”如果x是True,它返回True,否则它返回y的计算值。x=True;y=False;xory返回True。104运算符及其用法运算符名称说明例子<小于返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。5<3返回0(即False)而3<5返回1(即True)。比较可以被任意连接:3<5<7返回True。>大于返回x是否大于y5>3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。<=小于等于返回x是否小于等于yx=3;y=6;x<=y返回True。>=大于等于返回x是否大于等于yx=4;y=3;x>=y返回True。==等于比较对象是否相等x=2;y=2;x==y返回True。x='str';y='stR';x==y返回False。x='str';y='str';x==y返回True。!=不等于比较两个对象是否不相等x=2;y=3;x!=y返回True。105运算符优先级默认地,运算符优先级表决定了哪个运算符在别的运算符之前计算。运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2+3+4被计算成(2+3)+4。一些如赋值运算符那样的运算符是由右向左结合的,即a=b=c被处理为a=(b=c)。如果想要改变它们的计算顺序,可以使用圆括号。例如,想要在一个表达式中让加法在乘法之前计算,那么就可以写成类似(2+3)*4的样子。106运算符描述lambdaLambda表达式or布尔“或”and布尔“与”notx布尔“非”in,notin成员测试is,isnot同一性测试<,<=,>,>=,!=,==比较|按位或^按位异或&按位与<<,>>移位+,-加法与减法*,/,%乘法、除法与取余+x,-x正负号~x按位翻转**指数目录ContentsSuccessWords107第三部分类型转换108类型转换函数int()、float()、str()和bool()分别用于将变量转换成整型、浮点型、字符串和布尔型变量int(4.5)=4(直接去掉小数部分)float(4)=4.0(增加小数部分)complex(4)=4+0Jcomplex(4.5)=4.5+0J109类型转换数值运算操作符可以隐式地转换输出结果的数字类型大多数数据类型都可以通过str()函数转换为字符串目录ContentsSuccessWords110第四部分计算器的基本原理111要点计算器是现代进行快速、准确计算的有利工具,在超市、办公等领域都有广泛的应用。我们从现存简单计算器出发,模拟其功能和特点,在skids板上通过屏幕显示出来。112设计思路由于skids只有4个按键,所以我们将计算器键盘显示在屏幕,通过这4个按键来进行选择。清空键确认键向左移动方向键向右移动方向键113设计思路屏幕布局如图所示,最上方为显示区域,显示输入和计算结果;下方为键盘区域,可通过四个按键进行选择。显示区按键区114基本原理利用左和下方向键(可循环移动),移动选框到要进行计算的第一个操作数,按下确认键选择,同时显示区显示该数字。用方向键去选择四个运算符,按下确认键。用方向键去选择第二个操作数,按下确认键,显示区显示该数字。用方向键去选择等号键,按下确认键,后台根据操作数和运算符进行计算,并将结果显示在屏幕上。115基本原理当然也要支持浮点运算,通过选择左下角的小数点输入浮点数。同时也可以通过连续选择操作数和操作符进行连续的运算。按下清空键时,将清空所有已经输入的数和运算符,并清空屏幕显示区,使计算器恢复到原始状态,等待重新的输入与计算。目录ContentsSuccessWords116第五部分计算器的代码实现117变量#按键变量self.keys=[Pin(p,Pin.IN)forpin[35,36,39,34]]self.keymatch=["Key1","Key2","Key3","Key4"]self.keyboard=[[1,2,3,123],[4,5,6,456],[7,8,9,789],[10,0,11,12]]self.keydict={1:'1',2:'2',3:'3',123:'+',4:'4',5:'5',6:'6',456:'-',7:'7',8:'8',9:'9',789:'×',10:'.',0:'0',11:'=',12:'÷'}self.startX=self.margin*2self.startY=self.margin*2+self.button_height+self.marginself.selectXi=0self.selectYi=0获取按键引脚35,36,39,34定义键盘二位列表keyboard和它的字典keydict定义按键1的坐标(startX,startY)定义按键选择位置按键变量118变量#布局变量self.screen_width=240self.screen_height=320self.margin=5self.button_width=(self.screen_width-self.margin*7)/4self.button_height=(self.screen_height-self.margin*8)/5屏幕大小为240×320定义按键间距为5然后计算按键大小布局和计算器变量#计算器变量self.l_operand=0self.r_operand=0self.operator=123self.result=0self.dotFlag=0self.dotLoc=0定义左右操作数、运算符、运算结果定义小数点有无标志、小数点位置并对他们进行初始化119界面布局#画矩形defdrawRect(self,x1,y1,x2,y2,lineWidth,lineColor):x=int(x1)y=int(y1)w=int(x2-x1)h=int(y2-y1)screen.drawline(x,y,x+w,y,lineWidth,lineColor)screen.drawline(x+w,y,x+w,y+h,lineWidth,lineColor)screen.drawline(x+w,y+h,x,y+h,lineWidth,lineColor)screen.drawline(x,y+h,x,y,lineWidth,lineColor)定义画矩形的函数,使用screen.drawline()函数通过画直线的方法实现。120界面布局#画界面defdrawInterface(self):#显示框x1=self.margin*2y1=self.margin*2x2=self.screen_width-self.margin*2y2=self.margin*2+self.button_heightself.drawRect(x1,y1,x2,y2,2,0x00ffff)#16个按键foriinrange(4):y=self.startY+i*(self.button_height+self.margin)forjinrange(4):x=self.startX+j*(self.button_width+self.margin)self.drawRect(x,y,x+self.button_width,y+self.button_height,2,0x00ff00)调用之前画矩形的函数画出界面框架。121界面布局#显示按键文字defshowKeyboard(self):foriinrange(4):forjinrange(4):num=self.keyboard[j][i]x=i*(self.button_width+self.margin)+28y=(j+1)*(self.button_height+self.margin)+30text.draw(self.keydict[num],int(x),int(y),0x000000,0xffffff)定义显示按键文字的函数,使用text.draw()函数,在画好的界面键盘上写上相应的数字和运算符。122界面布局#按键选择初始化defselectInit(self):#变量初始化self.selectXi=0self.selectYi=0self.l_operand=0self.r_operand=0self.operator=123self.result=0self.dotFlag=0self.dotLoc=0按键选择初始化,选中按键1,屏幕显示区显示0。#显示初始化x=self.margin*3y=self.button_height-self.margin*3text.draw('0',int(x),int(y),0x000000,0xffffff)#选择初始化x=self.startXy=self.startYself.drawRect(x,y,x+self.button_width,y+self.button_height,2,0xff0000)123计算器功能实现#计算器算法defsendData(self,num):#数字0-9ifnum<10:ifself.operator==11:self.r_operand=0self.operator=123ifself.dotFlag==0:self.r_operand=self.r_operand*10+numelse:self.dotLoc=self.dotLoc+self.dotFlagself.r_operand=self.r_operand+num/(10**self.dotLoc)self.result=self.r_operand#小数点.elifnum==10:ifself.dotFlag==0:self.dotFlag=1#等号=elifnum==11:self.dotFlag=0self.dotLoc=0self.r_operand=self.calculate(self.l_operand,self.operator,self.r_operand)self.l_operand=0self.operator=numself.result=self.r_operand#运算符+-*/elifnum>11:self.dotFlag=0self.dotLoc=0self.l_operand=self.calculate(self.l_operand,self.operator,self.r_operand)self.r_operand=0self.operator=numself.result=self.l_operandelse:print('inputerror')实现四则运算、浮点运算、连续计算。124按键响应#按键事件处理defkeyboardEvent(self,key):#右移选择键ifself.keymatch[key]=="Key1":#取消前一个选择num=self.keyboard[self.selectYi][self.selectXi]x=self.selectXi*(self.button_width+self.margin)+self.startXy=self.selectYi*(self.button_height+self.margin)+self.startYself.drawRect(x,y,x+self.button_width,y+self.button_height,2,0x00ff00)#选择右边一个self.selectXi=(self.selectXi+1)%4num=self.keyboard[self.selectYi][self.selectXi]x=self.selectXi*(self.button_width+self.margin)+self.startXself.drawRect(x,y,x+self.button_width,y+self.button_height,2,0xff0000)右移按键响应,先取消前一个选择(用原色重新画一下边框),再选择右边一个按键(用另一种颜色画一下边框)。125按键响应#纵向移动键elifself.keymatch[key]=="Key2":#取消前一个选择num=self.keyboard[self.selectYi][self.selectXi]x=self.selectXi*(self.button_width+self.margin)+self.startXy=self.selectYi*(self.button_height+self.margin)+self.startYself.drawRect(x,y,x+self.button_width,y+self.button_height,2,0x00ff00)#选择右边一个self.selectYi=(self.selectYi+1)%4num=self.keyboard[self.selectYi][self.selectXi]y=self.selectYi*(self.button_height+self.margin)+self.startYself.drawRect(x,y,x+self.button_width,y+self.button_height,2,0xff0000)下移按键响应,先取消前一个选择(用原色重新画一下边框),再选择下边一个按键(用另一种颜色画一下边框)。126按键响应#确认键elifself.keymatch[key]=="Key3":num=self.keyboard[self.selectYi][self.selectXi]self.sendData(num)#清空显示区x=self.margin*3y=self.button_height-self.margin*3text.draw('',int(x),int(y),0x000000,0xffffff)#显示结果results=str(self.result)length=len(results)iflength>=13:length=13x=self.screen_width-self.margin*3-16*lengthy=self.button_height-self.margin*3text.draw(results[0:13],int(x),int(y),0x000000,0xffffff)确认按键响应,先通过当前坐标位置获取所选按键传给计算器核心算法,并将结果显示在屏幕上(先清楚之前的内容,再写新内容)。127按
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026银发人才面试题目及答案
- 2026银行技术面试题库及答案
- 2026银行投行面试题目及答案
- 2026隐形加班面试题及答案
- 2026城乡公交面试题及答案
- 2026储备生面试题目及答案
- 2026创意工作面试题及答案
- 2026年医疗质量分析和持续改进总结分析
- 春季开学前安全隐患排查报告
- 靖江市2025届数学四年级下学期期末模拟试题(含解析)
- 焊工复审课件
- 班风学风建设课件
- 内镜中心职业防护管理
- 2025春季江苏省粮食集团有限责任公司招聘2人(第二批)笔试历年备考题库附带答案详解试卷2套
- ILO -中国劳动力市场的工时不足、工时过度及工时错配 -基于高质量充分就业角度的工时分析
- DB15-T 4026-2025 水利工程格宾应用技术规范
- T/CUWA 60055-2023城镇排水管道螺旋缠绕内衬法修复用硬聚氯乙烯(PVC-U)带状型材
- T/CHES 54-2021取水权交易可行性报告编制导则
- 《建筑识图与构造》第10章-变形缝
- 2024年电路维修协议书范本
- 园林绿化工程硬质景观施工方案
评论
0/150
提交评论