自定义函数
1.什么是函数?
- 如上图,我们通常将脏衣服放在洗衣机当中,经过洗衣机的清洗之后,就变成了干净的衣服,我们不需要知道在洗衣机内部是怎么去洗衣服的,我们只需要将衣服放入洗衣机当中,得当干净衣服就可以了
- 函数,就类似于洗衣机,我们只需要它实现函数里面的功能,而我们却是不需要知道里面的功能是如何。
- 因此我们将函数看成一个功能的集合体,当我们需要使用函数的时候,直接进行调用就可以了
2.如何定义函数??
def fuction_name():
pass
- def为函数定义的关键字
- fuction_name为函数名称
- 用缩进表示函数体中的代码
利用函数绘制正方形
import turtle
pen=turtle.Pen()
#定义绘制正方形的函数
def square():
for i in range(4):
pen.forward(100)
pen.left(90)
#调用函数
square()
#移动画笔
pen.penup()
pen.goto(200,0)
pen.pendown()
#调用函数
square()
#绘制完毕
turtle.done()
运行结果
3.带参数的函数
如果我们想要画出长度可变的正方形,应该怎么做?
#定义带参数绘制正方形的函数
def square(length):
for i in range(4):
pen.forward(length)
pen.left(90)
- length代表参数
- 第一行的length代表使用参数
- 完全代码如下:
import turtle
pen=turtle.Pen()
#定义带参数绘制正方形的函数
def square(length):
for i in range(4):
pen.forward(length)
pen.left(90)
#调用函数
square(50)
#移动画笔
pen.penup()
pen.goto(100,0)
pen.pendown()
#调用函数
square(100)
#移动画笔
pen.penup()
pen.goto(300,0)
pen.pendown()
#调用函数
square(150)
#绘制完毕
turtle.done()
运行结果如下:
移动画笔的代码有些多余,如何解决这个问题?
- 在下面这个代码中,我们很明显可以看到有代码冗余,比如移动画笔的函数
import turtle
pen=turtle.Pen()
#定义带参数绘制正方形的函数
def square(length):
for i in range(4):
pen.forward(length)
pen.left(90)
#调用函数
square(50)
#移动画笔
pen.penup()
pen.goto(100,0)
pen.pendown()
#调用函数
square(100)
#移动画笔
pen.penup()
pen.goto(300,0)
pen.pendown()
#调用函数
square(150)
#绘制完毕
turtle.done()
- 改进如下:
import turtle
pen=turtle.Pen()
def square(length): #定义带参数绘制正方形的函数
for i in range(4):
pen.forward(length)
pen.left(90)
def moveTo(): #定义一个移动画笔的函数
pen.penup()
pen.goto(100,0)
pen.pendown()
#调用函数
square(50)
#移动画笔
moveTo()
#调用函数
square(100)
#移动画笔
moveTo()
#调用函数
square(150)
#绘制完毕
turtle.done()
运行结果:
- 我们可以看到,还有些许问题,后面两个正方形没有分开,因此我们可以为与移动函数添加参数来解决,代码如下:
import turtle
pen=turtle.Pen()
def square(length): #定义带参数绘制正方形的函数
for i in range(4):
pen.forward(length)
pen.left(90)
def moveTo(x,y): #定义一个移动画笔的函数
pen.penup()
pen.goto(x,y)
pen.pendown()
#调用函数
square(50)
#移动画笔
moveTo(100,0)
#调用函数
square(100)
#移动画笔
moveTo(300,0)
#调用函数
square(150)
#绘制完毕
turtle.done()
运行结果:
4.综合练习
- 完善 moveto()函数,使其在接受一个参数后可以自由控制是否需要在移动时留下痕迹
- 画出万花筒使用海龟库,结合函数绘制出万花筒的图样。以下图案仅作为示例