Python 挑战版 · Day 4
函数:给一组动作起名字
函数不是抽象定义,而是整理代码的办法。先感到复制房子很麻烦,再用 def 把动作打包。
节奏分配(45 分钟)
01
先制造痛感
回看 Day 3 房子代码,问:画 3 栋要复制几次?改几处坐标?
02
发明一个新动作
把“画墙”放进 draw_wall(),理解定义和调用是两件事。
03
拆成小函数
把墙、屋顶、门、窗分别起名字。
04
组合成 draw_house()
一个房子由多个小动作组成,函数可以调用函数。
05
反复调用造村庄
移动到不同位置,再调用 draw_house()。
教师话术
"函数不是新魔法,它只是给一组动作起名字。"
"注意:定义了函数,不代表它会执行。叫它一声,它才出来干活。"
"draw_house() 里面可以调用 draw_wall()、draw_roof(),动作可以组合动作。"
"如果想多画一座房子,不复制整段代码,只再调用一次 draw_house()。"
函数怎么理解
def draw_wall():定义一个叫 draw_wall 的动作
缩进代码属于这个动作里面的步骤
draw_wall()调用动作,真正开始执行
draw_house()把多个小动作组合成大动作
课堂代码
第一步:发明一个新动作
重点看两件事:冒号和缩进;定义后必须调用。
import turtle
t = turtle.Turtle()
t.speed(6)
t.pensize(2)
def draw_wall():
t.fillcolor("lightyellow")
t.begin_fill()
for i in range(4):
t.forward(100)
t.left(90)
t.end_fill()
# 定义函数只是让 Python 记住这个动作
# 真正执行,要叫它出来:
draw_wall()
turtle.done()第二步:组合成 draw_house()
这段表达结构:房子由四个小动作组成。
def draw_house():
# 把画房子的步骤装进一个函数
draw_wall()
draw_roof()
draw_door()
draw_window()
draw_house()完整基线:小村庄
import turtle
t = turtle.Turtle()
t.speed(6)
t.pensize(2)
def draw_wall():
t.fillcolor("lightyellow")
t.begin_fill()
for i in range(4):
t.forward(100)
t.left(90)
t.end_fill()
def draw_roof():
t.penup()
t.setheading(90)
t.forward(100)
t.setheading(0)
t.pendown()
t.fillcolor("tomato")
t.begin_fill()
for i in range(3):
t.forward(100)
t.left(120)
t.end_fill()
t.penup()
t.setheading(270)
t.forward(100)
t.setheading(0)
t.pendown()
def draw_door():
t.penup()
t.forward(20)
t.pendown()
t.fillcolor("sienna")
t.begin_fill()
t.forward(25)
t.left(90)
t.forward(40)
t.left(90)
t.forward(25)
t.left(90)
t.forward(40)
t.left(90)
t.end_fill()
t.penup()
t.setheading(180)
t.forward(20)
t.setheading(0)
t.pendown()
def draw_window():
t.penup()
t.forward(65)
t.left(90)
t.forward(50)
t.right(90)
t.pendown()
t.fillcolor("lightblue")
t.begin_fill()
for i in range(4):
t.forward(20)
t.left(90)
t.end_fill()
t.penup()
t.setheading(270)
t.forward(50)
t.setheading(180)
t.forward(65)
t.setheading(0)
t.pendown()
def draw_house():
draw_wall()
draw_roof()
draw_door()
draw_window()
# 移动到不同位置,反复调用同一个动作
t.penup()
t.goto(-170, 0)
t.pendown()
draw_house()
t.penup()
t.goto(20, 0)
t.pendown()
draw_house()
t.penup()
t.goto(170, 0)
t.pendown()
draw_house()
t.hideturtle()
turtle.done()扩展挑战
最后 8 分钟
基础再调用一次 draw_house();进阶写 draw_sun();挑战写 draw_chimney() 并放进 draw_house()。
def draw_sun():
t.penup()
t.goto(220, 170)
t.pendown()
t.fillcolor("gold")
t.begin_fill()
t.circle(30)
t.end_fill()
# 记得调用,太阳才会出现
draw_sun()完成标准
能区分“定义函数”和“调用函数”。
能说出 def 是给一组动作起名字。
能把 draw_wall、draw_roof 等小动作组合成 draw_house。
能通过多次调用 draw_house() 画出多个房子。
本节不讲 return。只要学生理解“定义动作”和“叫出动作”,就达标。
做完之后
收尾只问:能不能让每座房子大小、颜色都不一样?下一阶段可以把变化交给参数和变量。
模块目录
Python 挑战版