python入门之函数调用第二关_【python入门系列课程 第十课 初识函数】

前言

本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。

什么是函数

在正式解释什么是函数之前,来看Blocky迷宫游戏中的关卡。

关卡-1:

小人要走到红色的目标位置,目前有两个指令可以使用,前进:moveForward();左转:turnLeft()。

分析:

根据小人要走的路线观察,小人要达到目标,需要有前进指令,左转指令和右转指令;但是实际上只有两个指令,没有右转指令那要怎么解决呢?

我们知道一圈是360度的,往左转270和往右转90是同样的效果。所以三个往左指令就相当于一个往右指令。#往右

turnLeft()

turnLeft()

turnLeft()

用语言描述:1.前进

2.左转

3.前进

4.右转

5.前进

用代码表示:moveForward()# 1.前进

turnLeft() # 2.左转

moveForward()# 3.前进

turnLeft() # 4.右转

turnLeft()

turnLeft()

moveForward()# 5.前进

关卡-2:

接着再来看下面这个关卡:

方法是同样的,只不过次数更多了。

用语言描述:1.前进

2.左转

3.前进

4.右转

1.前进

2.左转

3.前进

4.右转

1.前进

2.左转

3.前进

4.右转

1.前进

2.左转

3.前进

4.右转

用代码描述:moveForward()# 1.前进

turnLeft() # 2.左转

moveForward()# 3.前进

turnLeft() # 4.右转

turnLeft()

turnLeft()

moveForward()# 1.前进

turnLeft() # 2.左转

moveForward()# 3.前进

turnLeft() # 4.右转

turnLeft()

turnLeft()

moveForward()# 1.前进

turnLeft() # 2.左转

moveForward()# 3.前进

turnLeft() # 4.右转

turnLeft()

turnLeft()

moveForward()# 1.前进

turnLeft() # 2.左转

moveForward()# 3.前进

turnLeft() # 4.右转

turnLeft()

turnLeft()

代码改造-1:

上面代码逻辑很容易理解,但是看上去有些代码很多余,现在我们先自己造一个turnRight()命令来改造一下:# 通过下面这个方法 就创建了一个turnRight()命令

def turnRight():

turnLeft()

turnLeft()

turnLeft()

moveForward()# 1.前进

turnLeft() # 2.左转

moveForward()# 3.前进

turnRight() # 4.右转

moveForward()# 1.前进

turnLeft() # 2.左转

moveForward()# 3.前进

turnRight() # 4.右转

moveForward()# 1.前进

turnLeft() # 2.左转

moveForward()# 3.前进

turnRight() # 4.右转

moveForward()# 1.前进

turnLeft() # 2.左转

moveForward()# 3.前进

turnRight() # 4.右转

代码改造-2:

上面的代码我们可以看到其实还是有很多代码都一样的,再来改造一下,将每一个直角(一共4个直角)再变成一个方法,取名叫做solve_a_corner()。# 通过下面这个方法 就创建了一个turnRight()命令

def turnRight():

turnLeft()

turnLeft()

turnLeft()

# 创建解决一个直角的命令

def solve_a_corner():

moveForward()# 1.前进

turnLeft() # 2.左转

moveForward()# 3.前进

turnRight() # 4.右转

solve_a_corner()

solve_a_corner()

solve_a_corner()

solve_a_corner()

可能有些人会说最后还可以用循环再改造一下,如果多的话的确可以,这里因为不是重点就不讨论了。函数其实并没有用到新的编程知识,只是一种管理组织代码的一种方式。函数是为了让我们更好的重复使用已经写好的功能代码,函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。

你已经知道Python提供了许多内建函数,比如print()。你也可以自己创建函数,这被叫做用户自定义函数。

上面因为有多处需要用到右转,所以通过自己写的一个turnRight()方法代替三个turnLeft(),之后只需要使用turnRight就可以了。下面的代码其实就定义了一个名字叫做turnRight的函数,使用的时候只需要用名字加上括号就可以了--turnRight()。# 通过下面这个方法 就创建了一个turnRight()命令

def turnRight():

turnLeft()

turnLeft()

turnLeft()

后面的solve_a_corner()也是自定义的一个函数。# 创建解决一个直角的命令

def solve_a_corner():

moveForward()# 1.前进

turnLeft() # 2.左转

moveForward()# 3.前进

turnRight() # 4.右转

为什么要使用函数?

通过上面的案例,相信你应该可以知道一些,为什么要学习函数了,总结一下,具体的原因包括以下几点:

1.创建一个新的函数可以让你给一组语句命名,这可以让你的程序更容易阅读和调试。

2.通过消除重复的代码,函数精简了程序。以后,如果你要做个变动,你只需在一处修改即可。

3.将一个长程序分解为多个函数,可以让你一次调试一部分,然后再将它们组合为一个可行的整体。

4.设计良好的函数经常对多个程序都有帮助。一旦你写出并调试好一个函数,你就可以重复使用它。

函数怎么用?

定义函数

在使用函数前需要先定义出一个函数。函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (),函数里面的内容需要有缩进,一般格式如下:def function_name(arg1,arg2,...,argN):

函数代码块

例-1:定义一个可以打印hello的函数。def say_hello():

print("hello")

调用函数

函数如果只是定义好了,没有调用是没有效果的,调用函数时只需要函数名加上括号就可以了。def say_hello():

print("hello")

# 调用函数

say_hello()

函数参数

前面定义函数的一般格式中括号里是不是还有一些arg1,arg2内容,这些在函数中叫做参数,参数具体可以分为形参和实参。

例-2:定义一个可以打印任意hello次数的函数。def say_hello(n):

for i in range(n):

print("hello")

# 调用函数

say_hello(5)

解释:

括号里面的n就叫做形参,5就叫做实参;如果把实参改成100,那么就可以打印100次了,这样灵活性就更高了。通俗一点来说,这里的实参其实就是一个变量,占位置的;当要调用时,实参也就是实际传入的数字就会替代形参了。

例-3:定义一个可以自定义内容和次数的函数。def say_hello(n,content):

for i in range(n):

print(content)

# 调用函数

say_hello(5,"大家好,我是叶子,我爱学编程")

这样函数的通用性就更高了,函数的威力远不止于这些,随着课程深入,你会了解的越来越多,到目前位置这个就已经够用了。

任务:绘制3排正方形,每排3个

要求:数量,颜色可变。

最后来完成一个任务,对前面学习过的内容做个综合应用。

思路分析:

1.先绘制一个大小100,颜色黑色固定的正方形。

2.利用函数的方式改写,传入正方形颜色的参数。

3.绘制一排3个正方形。

4.改成可以绘制一排任意数量的正方形。

5.绘制3排,每排任意数量的正方形。

6.绘制任意排,任意列数量的正方形。

代码实现:

1.绘制100,颜色黑色正方形import turtle

pen = turtle.Pen()

for i in range(4):

pen.forward(100)

pen.left(90)

turtle.done()

2.定义一个可以自定义颜色的函数import turtle

pen = turtle.Pen()

# 定义一个颜色自选的函数

def draw_square(color):

pen.pencolor(color)

for i in range(4):

pen.forward(50)

pen.left(90)

#调用函数

draw_square("red")

turtle.done()

3.绘制一排3个正方形import turtle

pen = turtle.Pen()

# 定义一个颜色自选的函数

def draw_square(color):

pen.pencolor(color)

for i in range(4):

pen.forward(50)

pen.left(90)

#调用函数

draw_square("red")

pen.forward(60)

draw_square("red")

pen.forward(60)

draw_square("red")

pen.forward(60)

turtle.done()

4.改成可以绘制一排任意数量的正方形import turtle

pen = turtle.Pen()

# 定义一个颜色自选的函数

def draw_square(color):

pen.pencolor(color)

for i in range(4):

pen.forward(50)

pen.left(90)

def draw_line_square(n,color):

for i in range(n):

draw_square(color)

pen.forward(60)

draw_line_square(4, "green")

turtle.done()

5.绘制3排,每排任意数量的正方形import turtle

pen = turtle.Pen()

# 定义一个颜色自选的函数

def draw_square(color):

pen.pencolor(color)

for i in range(4):

pen.forward(50)

pen.left(90)

def draw_line_square(n,color):

for i in range(n):

draw_square(color)

pen.forward(60)

draw_line_square(4, "green")

pen.goto(0,-60)

draw_line_square(4, "green")

pen.goto(0, -120)

draw_line_square(4, "green")

pen.goto(0, -180)

turtle.done()

6.绘制任意排,任意列数量的正方形

前面绘制完发现有移动的痕迹留下,在绘制正方形的函数中,加上了抬笔和落笔的方法解决了。import turtle

pen = turtle.Pen()

# 定义一个颜色自选的函数

def draw_square(color):

pen.pencolor(color)

pen.pendown()# 落笔

for i in range(4):

pen.forward(50)

pen.left(90)

pen.penup() # 抬笔

def draw_line_square(n, color):

for i in range(n):

draw_square(color)

pen.forward(60)

def draw_any_square(n,m,color):

for i in range(m):

draw_line_square(n, color)

# 绘制完一行,y坐标需要-60,i是从0开始的,需要+1

pen.goto(0, -60*(i+1))

draw_any_square(5, 3, "red")

turtle.done()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值