感谢您下载慧谷网平台上提供的,PPT,作品,为了您和慧谷网以及原创作者的利益,请勿复制、传播、销售,否则将承担法律责任!慧谷网将对作品进行维权,按照传播下载次数进行十倍的索取赔偿!,趣味编程挑,战,:,从,Python,入门到,AI,应用,04,绘,制五星红旗,函数,趣味编程挑战:从Python入门到AI应用 04绘制五星红旗,目录,目录,1.1,挑战描述,1.2,解题思路,1.3,编程实现,1.4,函数,1.5,变,量的作用域,1.6,小结,1.7,巩固练习,目录目录1.1 挑战描述,1966,年,,Seymour Papert,和,Wally Feurzig,发明了一种专门给儿童学习编程的语言,LOGO,语言,它的特色就是通过编程指挥一个可爱的小海龟(,turtle,)在屏幕上绘图。海龟绘图(,Turtle Graphics,)后来被移植到了包括,Python,的各种高级语言中,,Python,内置了,turtle,库,基本上,100%,复制了,Turtle Graphics,的所有功能。,在海龟绘图中,创作者可以编写程序指令让一个虚拟的海龟在电脑屏幕上来回移动。这只海龟随身携带着一只钢笔,创作者可以让海龟使用这只钢笔来绘制五颜六色的图案。使用海龟绘图,创作者们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以通过观察海龟来理解每行代码如何影响到它的移动,帮助其理解代码的逻辑。所以海龟绘图也常被用作新手学习,Python,的一种有效方法。,本,次挑战中,需,要用,Python,语言的,turtle,库,在屏幕上绘制出一面五星红旗。,1.1,挑战描述,1966年,Seymour Papert 和 W,Python,语言的,turtle,库中提供了种类丰富的内置函数,以帮助使用者绘制绘制各种图案。本挑战中将会使用到的部分,turtle,库函数如,表所示:,1.2,解题思路,函数名称,功能,示例,begin_fill(),在绘制要填充的形状之前调用,turtle.begin_fill(),bgcolor(,颜色值,),设置主窗口的背景颜色,turtle.bgcolor(red),color(,颜色值,),设置画笔颜色和填充颜色,turtle.color(yellow),done(),海龟绘图程序的结束语句,turtle.done(),down(),放下画笔,移动时将画线,turtle.down(),end_fill(),填充上次调用,begin_fill(),之后绘制的形状,turtle.end_fill(),forward(,距离,),海龟前进指定距离,方向为海龟的朝向,turtle.forward(10),goto(X,坐标,Y,坐标,),海龟移动到一个绝对坐标,turtle.goto(100,100),hideturtle(),使海龟不可见,turtle.hideturtle(),left(,角度,),海龟左转指定角度,turtle.left(5),right(,角度,),海龟右转指定角度,turtle.right(5),seth(,角度,),设置海龟的朝向:,0,为东、,90,为北、,180,为西、,270,为南,turtle.seth(0),setup(,宽,高,距屏幕左边缘像素数,距屏幕上边缘像素数,),设置主窗口的大小和位置,turtle.setup(600,400,0,0),speed(,速度值,),设置海龟移动速度,范围,0,10,turtle.speed(7),Python 语言的 turtle 库中提供了种,使,用自然语言描述”绘制五星红旗“挑战的算法,其步骤如下。,(,1,)初始化五星红旗的大小和背景色、画笔颜色、海龟的移动速度。,(,2,)调用自定义函数,drawStar(),绘制大五星。,(,3,)调用自定义函数,drawStar(),分别绘制四个小五星。,1.2,解题思路,使用自然语言描述”绘制五星红旗“挑战的算法,其步,1.3,编程实现,1.3编程实现,1.4,函数,函,数是,Python,语言里最重要的概念之一。在编程时,程序员们需要将真实世界里的大问题分解为小问题,然后通过一个个函数交出答案。函数即是重复代码的克星,也是对抗代码复杂度的最佳武器。,1,、内,置函,数,当,我们用,Python,编程的时候,很多情况下,我们只不过是在使用别人已经写好的函数,即内置函数。例如,,print(),函数。,2,、函,数的参,数,在,Python,中,函数的参数,有如下两种,:位,置参数和关键字参数。在函数定义中,带有,=,的参数为已设定了默认值的参数,叫做关键字参数,其它的是位置参数。,3,、自定义函数,程,序员们可以定义并使用自己的函数,就像内置函数一样,自定义函数的关键字是,def,,以下代码定义了一个什么都不干的函数:,1.4函数 函数是 Python 语言里最重要的概,1.4,函数,为,函数取名字的规则与变量的命名规则是一样的,即只能由数字、字母和下划线构成,不能以数字开头,不能使用关键字,且尽量使用有意义的单词或单词组作为函数名称,。,自,定义函数的第二步是定义参数列表,函数可以不接收任何参数(参数列表为空),也可以接收一个或多个参数。接下来定义一个判断某年是否为闰年的函数,取名为,isLeap(),,它接收一个整型参数,若是闰年,则返回,True,;否则返回,False,。,1.4函数 为函数取名字的规则与变量的命名规则是一,1.4,函数,函,数可以同时接收多个参数。例如,可以写一个函数,让它输出从大于等于某个年份到小于另外一个年份所有的闰年。这时就需要定义两个参数,调用它的时候也需要传递两个参,数。,自,定义函数的第三步工作是处理返回值。函数通过,return,语句来输出返回值。但函数内部,不一定非要有,return,语句,上面的,do_nothing(),函数就没有,return,语句,如果函数内部并未定义返回值,那么该函数的返回值为,None,,当,None,被当作布尔值对待的时候,相当于是,False,。而上面的,isLeap(),函数,就有一个布尔型的返回值,并通过,return,语句输出。若是闰年,则返回,True,;否则返回,False,。,1.4函数 函数可以同时接收多个参数。例如,可以写,1.5,变量的作用域,在,程序执行过程中,变量有全局变量(,Global Variable,)和局域变量(,Local Variable,)之分。首先,每次某个函数被调用的时候,这个函数会开辟一个新的内存区域,这个函数内部所有的变量,都是局域变量。也就是说,即便那个函数内部某个变量的名称与它外部的某个全局变量名称相同,它们也不是同一个变量,只是名称相同而已;其次,更为重要的是,当外部调用一个函数的时候,传递给参数的不是变量本身,而是变量的值。也就是说,当,increaseOne(n),被调用的时候,被传递给那个恰好名称也叫,n,的局域变量的,是全局变量,n,的值,1,;而后,,increaseOne(),函数的代码开始执行,局域变量,n,经过,n+=1,执行之后,其值变为,2,,而后这个值又被,return,语句返回,所以,print(increaseOne(n),所输出的值是函数被调用之后的返回值,即,2,;最后,全局变量,n,的值并没有被改变,因为局部变量,n,(它的值是,2,)和全局变量,n,(它的值还是,1,)只不过是名字相同而已,但它们并不是同一个变量。,有一种情况要格外注意,如果传递进来的参数是可变容器(例如,列表)时,函数内部如果对这个容器的某些项进行了修改,则全局有效。所以,一个比较好的习惯是,如果传递进来的值是列表,那么在函数内部对其操作之前,应先创建一个它的拷贝。容器和列表是“前置引用”知识,会在后面的挑战中详细介绍。,1.5变量的作用域 在程序执行过程中,变量有全局变,1.6,小结,本,次挑战中,,通,过“绘制五星红旗”挑战,引入了函数的知识点,希望各,位能,够掌握,Python,中内置函数和自定义函数的使用方法,具体包括:,内,置函数,函,数的参数和返回值,自,定义函数,变,量的作用域,1.6小结 本次挑战中,通过“绘制五星红旗”挑战,,1.7,巩固练习,习,题,1,:,阅,读如下,Python,代码,写出运行结果。,1.7巩固练习习题1:,1.7,巩固练习,习,题,2,:,“,小处着手”,是一个很好的学习方式,先学会编写各种“小”函数,慢慢地就能设计“大”函数了。下面的,Python,代码,包含了四个非常短小的函数,请阅读后写出运行结,果。,1.7巩固练习习题2:,1.7,巩固练习,习,题,3,:,请,编写一个,Python,程序,通过自定义两个函数,来求某个区间内的素数和。函数,isPrime(n),用于判断一个数,n,是否为素数,函数,sum(a,b),用于求区间,a,b,内所有素数的和,假定,1ab,。,1.7巩固练习习题3:,谢谢,谢谢,