经过前面的学习,你已经对编程有了一点了解,本节我们要更进一步:写个函数。
在初中数学中,有对函数的详细解释,此处不赘述。
对于Python里面的函数,有自己的独特定义方法。
还是打开myturtle.py
文件,将其中的代码修改为:
from turtle import *
shape("turtle")
def polygon():
for i in range(4):
forward(100)
right(90)
polygon()
上面代码中的第1、3行没有变化,请读者注意的是第5行,这一行开始定义一个函数:
def
是Python中定义函数的关键词,看到它就意味着现在要开始写一个函数了。polygon
是当前所定义的函数的名字,一般用小写字母表示。()
这个括号里面应该写函数的参数,现在我们暂时不写参数,但是括号还是要写上,不能不写。
注意第6行到第8行,就是我们已经熟悉的绘制正方形的程序——前面使用过的,放到了这里,但是,注意第6行,相对函数左侧要有四个空格的缩进,后面各行依次缩进。这样,用缩进的方式就表示第6行到第8行,是当前函数polygon
的代码块,只有在调用这个函数的时候,这部分代码才被执行。
如何调用这个函数?第10行,就是调用这个函数。
按F5
键执行此文件,同样画出了那个正方形——请读者自行调试。
上面这个函数好像也没有显示出什么特别,就是把原有的代码“打包”放到函数里面了,能不能让函数更灵活一些呢?
那就继续修改。
from turtle import *
shape("turtle")
def polygon(side):
for i in range(4):
forward(side)
right(90)
polygon()
这次修改了第5行和第7行:
- 第5行中增加了一个参数
side
,它表示多边形的边长 - 第7行就要使用这个参数,当调用这个函数的时候,就按照该参数的值绘制多边形。
如果完成了上述修改,就执行此文件,会出现如下情况:
Traceback (most recent call last):
File "/Users/qiwsir/Documents/Codes/mathadventure/myturtle.py", line 16, in
polygon()
TypeError: polygon() missing 1 required positional argument: 'side'
报错的原因是,我们所调用的函数polygon
已经有参数了,不能再如同原来那样调用。
修改如下:
from turtle import *
shape("turtle")
def polygon(side):
for i in range(4):
forward(side)
right(90)
polygon(100)
polygon(50)
polygon(25)
上面修改之后的文件中,连续三次调用polygon
函数,但是参数不同,也就是要按照三个不同的边长绘制正方形。
从上面的执行效果中,可以看到函数的一个好处,那就是避免了同样代码的重复。如果按照以往的做法,我们分别画不同边长的多边形,需要将第6行到第8行的代码重复若干遍,但是,现在只需要调用若干次该函数即可。
函数中的参数最多可以多少个?理论上是没有个数限制的,但是,太多了有点麻烦。不过,在画多边形的这个示例中,根据前面的学习,我们知道,至少还可以设置多边形的边数。
于是乎这个函数还可以这么写。
from turtle import *
shape("turtle")
n = input("请输入多边形的边数:")
length = input("请输入多边形的边长:")
def polygon(side, n):
alpha = 360 / n
for i in range(n):
forward(side)
right(alpha)
polygon(int(length), int(n))
第4、5行,还是通过键盘获得用户输入的多边形边数和编程。
第7行,在定义函数的时候,有两个参数,side
代表边长,n
代表边的个数。
第8行,计算海龟转过的角度。后面的程序就好理解了。
第13行,调用函数的时候要特别注意:
int(length)
和int(n)
是按照位置顺序向函数polygon
提供的两个参数,即int(length)
对应side
,int(n)
对应n
- 并且,同时将用函数
input
获得到的两个数据转化为了整数类型。
下面图示显示的是执行过程和输出结果。
是不是越来越感受到函数的特点了?
如果把我们已经学习过的循环语句结合起来,还能看到更酷炫的结果。
from turtle import *
shape("turtle")
def polygon(side, n):
alpha = 360 / n
for i in range(n):
forward(side)
right(alpha)
for side in range(10, 50, 10):
for n in range(3, 10):
polygon(side, n)
这段程序的执行时间稍微长一些,小海龟要跑好多圈——多少?能推算出来么?
并且,读者是否可以理解第11行到第13行的代码?结合前面已经学习过的知识。
代码的执行效果如下图所示:
关于代码的理解,留给读者研究了。
专注于软件和AI的公众号
老齐教室
觉得好看,就点这里???