python怎么画参数函数图像_Python:海龟绘图(七)——初识函数

今天我们要探讨的核心问题是程序设计中的一个非常重要的内容——函数。函数的定义和示例已在本期的前导部分讲过,这里不再赘述。直接进入今天的任务:如何像下图中那样,一口气画20个边数各不相同的多边形?

cc2d8a1c77ea

画正多边形的程序前面的课程已经讲了(点此复习),我们得到了如下的代码:

cc2d8a1c77ea

仔细观察上述代码,我们发现,真正绘制正多边形的操作都是在循环部分完成的。那么我们能否把这个循环部分“抽取”出来,变成能独立完成任务的一个“代码块”呢?或者说,我们能否定义一个能绘制正多边形的“函数”呢?如果能,不就离我们要完成的任务更近一步了嘛!

答案当然是肯定的。但还有一个小问题需要解决。

回顾前导部分的函数定义和示例,我们发现定义函数时,一般需要给函数提供一些“数据”,告诉函数到底该计算“几”的平方根,或是在屏幕上显示“什么”字符。这个“几”和“什么”,就是我们提供给函数的“初始数据”,行话叫“参数”。函数只有获得了这些“参数”,才能按照我们的需要做好它的分内之事。

回到我们的“正多边形”函数。虽然绘制正多边形的操作涉及很多因素——边长、旋转角度、边数等,但实际上整个绘制多边形的循环部分都是由一个变量在“操纵”(见上图红框),那就是“sides(边数)”。只要给定边数,我们就能让程序自动绘制出一个尺寸合适的正多边形。其实想想也很容易理解,如果不告诉函数多边形的边数,函数怎么知道该画几边形呢?!

有了这些分析,下面来看具体操作:

Step1:在“import”语句下方,输入“def draw_n_sides(n):”(如下图)。

cc2d8a1c77ea

这是一个标准的“函数定义”语句(行话叫“函数头”,外国话叫“header”),由函数定义标志“def”,函数名“draw_n_sides”、括号内的参数“n”以及语句末尾的“冒号”组成。函数名和参数名可以根据需要自己起,最好是起那种一看到名称就能猜出用途的名字。参数的个数不限,也可以不要参数,但括号一定要有,即使里面没有任何参数也不能省略。

Step2:将原来绘制正多边形的语句拷贝至“函数头”下方,形成“函数体”(外国话叫“body”),并在函数体的每行语句前加“4个空格”或是按1次“Tab键”,形成“缩进”(如下图)。

cc2d8a1c77ea

“缩进”很重要!它是Python中强制性的语法要求(这在前面讲“循环语句”时也提到过),程序在执行时,就是根据“缩进”来判断语句到底是否位于函数体内部的。

Step3:将函数体中的变量“sides”全部替换为“n”——因为函数体中并没有定义变量“sides”,我们在函数体中是用“n”来表示“边数”的(如下图)。

cc2d8a1c77ea

至此,函数已定义完毕,下面就来用一下试试吧!

cc2d8a1c77ea

把程序中原来的绘制正多边形代码删去,替换为我们的“函数名”,并把参数“n”替换为我们之前定义的变量“sides”,如上图所示。

按下“F5”运行。Wow!效果一样很好对不对?而且,看看我们现在的代码,变得多么简洁,只用一句“函数调用”就实现了“绘制正N边形”的功能!

现在我们拥有了一个功能如此强大的函数,再来完成本课的目标就会轻松许多了。

cc2d8a1c77ea

我们再来仔细观察一下我们要绘制的图形——从最上边开始,先是一个“三角形”,然后是一个“正方形”,然后又是一个“正五边形”,再接着是“正六边形”、“正七边形”、……

经过这么一分析,我们的脑海中大概应该已经有了思路——使用一个循环,边数从“3”开始,不断增加,一层层的绘制“正多边形”就行了。

说干就干!

我们使用一个计数循环,将边数的范围设定为“3至12”(先来10次试试),多次调用函数“draw_n_sides”,得到代码如下图。

⚠️注意:将边数的范围设定为“3至12”,需将“range”列表的起止写为(3,13),range列表的规则是“包括起点‘3’,但不包括终点‘13’”,切记!

cc2d8a1c77ea

这里,我们不得不再次感叹,使用函数后的代码“可读性”有了很大提高,因为我们把绘制正N边形的“细节”,全部“隐藏”在了定义函数的过程中。函数的使用者不用关心这个函数到底是怎么画出正多边形的,他们“只管用”就好了!

再次按下“F5”运行,得到了我们的最终结果……

cc2d8a1c77ea

哦不!这是什么?怎么会这样!我们的思路完全正确啊,程序的逻辑也无懈可击,为什么得到的结果却事与愿违?

对于产生这个结果的原因我今天不做过多分析,留给大家进行分析思考,看看您能不能找到问题的根源,并着手把问题解决掉呢?

提示:仔细对比错误图形与正确图形的差别。

项目小结:

在今天的项目中,我们:

学习了“定义函数”的方法;

学习了如何把具有一定功能的一段代码抽取出来,形成一个独立函数的思维过程,这是本课的重点和难点,也是今后很大一部分课程的核心内容;

学习了调用“自己定义的函数”(简称“自定义函数”)的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值