前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【python入门系列课程 第十课 初识函数】

【python入门系列课程 第十课 初识函数】

作者头像
叶子陪你玩
发布于 2020-03-12 07:19:49
发布于 2020-03-12 07:19:49
62200
代码可运行
举报
运行总次数:0
代码可运行
前言

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

什么是函数

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

关卡-1:

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

分析:

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#往右
turnLeft()
turnLeft()
turnLeft()

用语言描述:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1.前进
2.左转
3.前进
4.右转
5.前进

用代码表示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
moveForward()# 1.前进
turnLeft() # 2.左转
moveForward()# 3.前进
turnLeft() # 4.右转
turnLeft()
turnLeft()
moveForward()# 5.前进

关卡-2:

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

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

用语言描述:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1.前进
2.左转
3.前进
4.右转
1.前进
2.左转
3.前进
4.右转
1.前进
2.左转
3.前进
4.右转
1.前进
2.左转
3.前进
4.右转

用代码描述:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()命令来改造一下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 通过下面这个方法 就创建了一个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()。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 通过下面这个方法 就创建了一个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()。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 通过下面这个方法 就创建了一个turnRight()命令
def turnRight():
    turnLeft()
    turnLeft()
    turnLeft()

后面的solve_a_corner()也是自定义的一个函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 创建解决一个直角的命令
def solve_a_corner():    
    moveForward()# 1.前进
    turnLeft() # 2.左转
    moveForward()# 3.前进
    turnRight() # 4.右转

为什么要使用函数?

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

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

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

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

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

函数怎么用?

定义函数

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def function_name(arg1,arg2,...,argN):
    函数代码块

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def say_hello():
    print("hello")

调用函数

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def say_hello():
    print("hello")
# 调用函数
say_hello()

函数参数

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def say_hello(n):
    for i in range(n):
        print("hello")
# 调用函数
say_hello(5)

解释:

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

例-3:定义一个可以自定义内容和次数的函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,颜色黑色正方形

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import turtle
pen = turtle.Pen()
for i in range(4):
    pen.forward(100)
    pen.left(90)
turtle.done()

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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个正方形

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.改成可以绘制一排任意数量的正方形

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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排,每排任意数量的正方形

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.绘制任意排,任意列数量的正方形

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【python入门系类课程 第三课 神奇的画笔】
本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。
叶子陪你玩
2020/03/12
1.1K0
【python入门系列课程 第五课 双重循环的威力】
本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。
叶子陪你玩
2020/03/12
5720
【python入门系类课程 第四课 循环的威力】
本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地方也欢迎指出,在此先行谢过。
叶子陪你玩
2020/03/12
4950
少博士趣学Python - 绘制有趣图形
另外,也可以使用官方的编辑器 IDLE https://www.python.org/downloads/
Michael阿明
2023/05/03
6980
少博士趣学Python - 绘制有趣图形
Python学习之旅(三十二)
2、向正方向运动 distance 长的距离:turtle.forward(distance)
py3study
2020/01/20
5150
【我和Python算法的初相遇】——体验递归的可视化篇
递归是一种算法,它利用函数的自身调用来解决问题。递归的历史可以追溯到古代的数学家和逻辑学家,如希腊哲学家亚里士多德和印度数学家阿耶尔巴塔。然而,递归算法的实际应用可以追溯到早期的计算机科学,尤其是在20世纪40年代和50年代的计算机发展初期。
ImAileen
2024/01/18
3420
【我和Python算法的初相遇】——体验递归的可视化篇
KTurtle编程使用入门
KTurtle 是一个KDE开发的 Turtle Graphics(海龟绘图法) 教育编程环境,通过控制海龟的行进,在屏幕上绘制出相应图案的技术。它是根据开源的 GNU通用公共许可证发布。它可以让孩子通过可视化方式学会基本的编程思维,并掌握一定的数学、几何等知识。它的结构非常简单,非常适合儿童学习。
drunkdream
2023/10/17
3910
KTurtle编程使用入门
Python turtle 模块可以编写游戏,是真的吗?
turtle(小海龟) 是 Python 内置的一个绘图模块,其实它不仅可以用来绘图,还可以制作简单的小游戏,甚至可以当成简易的 GUI 模块,编写简单的 GUI 程序。
一枚大果壳
2022/08/23
1.5K0
Python turtle  模块可以编写游戏,是真的吗?
Turtle入门一
1.方形 import turtle t = turtle.Pen() for x in range(200): t.forward(x)#向右移动x t.left(90)#向左旋转九
川川菜鸟
2021/10/18
4380
Python中的高级turtle(海龟)作图
在Python里,海龟不仅可以画简单的黑线,还可以用它画更复杂的几何图形,用不同的颜色,甚至还可以给形状填色。 一、从基本的正方形开始 引入turtle模块并创建Pen对象: >>> import turtle >>> t = turtle.Pen() 前面我们用来创建正方形的代码如下: >>> t.forward(50) >>> t.left(90) >>> t.forward(50) >>> t.left(90) >>> t.forward(50) >>> t.left(90) >>> t,forwar
Zoctopus
2018/06/04
3.3K0
1024特别剪辑: 使用Python Turtle 库绘制一棵随机生成的树
这段代码使用 Python Turtle 库绘制一棵随机生成的树,并在最上层绘制一个 1024 程序员节快乐的文字。
初阶牛
2023/10/26
4140
1024特别剪辑: 使用Python Turtle 库绘制一棵随机生成的树
Python新手进阶教程之1、海龟作图——用Python绘图(1)「建议收藏」
使用海龟作图,我们不仅能够只用几行代码就创建出令人影响深刻的视觉效果,而且还可以跟海龟看看几行代买如何影响到它的移动。者能够帮助我们理解代码的逻辑。
全栈程序员站长
2022/09/07
7680
递归的递归之书:第十章到第十四章
在本章中,你将编写自己的递归程序,根据自定义需求搜索文件。你的计算机已经有一些文件搜索命令和应用程序,但通常它们只能根据部分文件名检索文件。如果你需要进行奇特、高度特定的搜索怎么办?例如,如果你需要找到所有具有偶数字节的文件,或者文件名包含每个元音字母的文件?
ApacheCN_飞龙
2024/01/11
6820
递归的递归之书:第十章到第十四章
python中用turtle画一个圆形(pythonturtle教程)
最近发现一个很有意思的画图的python库,叫做turtle,这里先说下用turtle这个库来实现用正方形画圆的思路。
全栈程序员站长
2022/07/29
2.4K0
Python有趣的小案例
来源:python ID:python6359 美国队长的锅 emmmmmmmm.......没错就是他的锅 代码 # 所需依赖:python3 pycharm # print 打印 print('hello world!') # 注释符号 # 井号后面灰色的内容是注释,相当于笔记,会被机器忽略 # 变量和值 # n 是变量, 100 是值,等号的作用是赋值 # n 相当于高中数学的 xyz ,只不过 xyz 的值只能是数字,变量的功能要更强大 n = 100 m = 'hello' print(n
小小科
2018/06/20
2.7K0
手把手教你基于Python实现简单绘图
turtle库是Python语言中自带的一个用于绘制图像的函数库。turtle库为使用者提供一个或多个小乌龟作为画笔,使用者可通过turtle库提供的各种方法去控制小乌龟在一个平面直角坐标系中移动并绘制移动轨迹以画出想要的图案
一个风轻云淡
2024/01/03
4790
在编程中发现数学之美——使用Python小龟绘制多边形
在使用数学知识画出很酷的各种图形之前,你需要先学习Python编程语言的基础知识。本文将会带你熟悉以下编程概念:循环、变量、函数、使用小龟模块绘制图像。本文假设你已经安装了Python,如果没有,欢迎你访问我的在线编程学习网站www.icoding.pub,你可以在编程入门—使用python语言开发游戏课程中下载Python并学习安装过程和Python基础操作。本文是在Python编程中发现数学之美的第一章内容,其余内容会陆续发布在www.icoding.pub,欢迎关注。
fanzhh
2019/08/20
4K1
在编程中发现数学之美——使用Python小龟绘制多边形
python之turtle海龟绘图篇[通俗易懂]
python2.6版本中后引入的一个简单的绘图工具,叫做海龟绘图(Turtle Graphics),出现在1966年的Logo计算机语言。 海龟绘图(turtle库)是python的内部模块,使用前导入即可 import turtle 海龟有3个关键属性:方向、位置和画笔(笔的属性有色彩、宽度和开/关状态)
全栈程序员站长
2022/09/14
3.7K0
python之turtle海龟绘图篇[通俗易懂]
画一棵树
从一个树枝开始,分叉向两端(或者更多端),然后继续从新的树枝进行分叉,......
一只大鸽子
2022/12/06
3760
画一棵树
Python生成高级圣诞树-代码案例剖析
这段代码是使用turtle库创建一个图形界面,绘制了一组彩色的正方形和圆形,最终呈现出一幅图案。以下是对代码的解析:
一键难忘
2023/12/23
2.3K0
推荐阅读
相关推荐
【python入门系类课程 第三课 神奇的画笔】
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档