前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SAP SD 销售开票处理
在SAP中,财务需要对销售部门所递交的交货单进行创建销售凭证,确保其传输至金税系统的正确性,进行销售发票的开具等行为。另外销售发票开具后,财务释放销售凭证,批准至会计凭证,进行账务处理。
用户5495712
2020/03/26
2.9K0
SAP SD 销售开票处理
SAP FICO顾问工具箱
总结了一下这几年做财务顾问中使用到的事务码,归类如下,当成FICO顾问必备的工具箱:
SAP FICO财务与成本
2022/03/18
3K0
SAP各种凭证的取消小结
一:凭证的更改 1,已经过帐的 FB02. 过完帐的允许更改的地方有限,只有凭证抬头文本,参照,分配,文本,原因代码等 2,预制凭证的更改. TCODE,FBV2. 预制凭证可以更改的地方很多,只有凭证编码+公司代码+记帐码不允许更改. 如果科目错误,可以把金额置为0 ,这样凭证保存后打印出来就不会含有那个科目了. 二:凭证冲销 原则:通过后勤产生的会计凭证只能够通过冲销相应的物料凭证(后勤凭证)来达到冲销会计凭证的目的.二:固定资产的产生的凭证不可通过冲销,只可做一个相反的会计凭证来调整. 1,财务模块手工输入的凭证的冲销 TCODE:FB08 输入凭证号码,会计年度,公司代码,冲销原因(如果冲销当月凭证就选择01,以前月分的用02 如果选择02需要输入记帐日期).回车. 如果出现下面的显示“财务中不能冲销的凭证”就说明这不是通过财务做进去的凭证,而是后勤产生的凭证.不可在FB08冲销.  当输入凭证属于手工输入的凭证时,保存即可.就会出现提示:出现凭证XXXXXXXXXX已经保存.表明是冲销完成. 2,MM模块的凭证冲销 2.1)MM模块产生的会计凭证的冲销 TCODE:MBST 输入凭证类型和记帐日期,会计年度等. 保存.系统出现:出现凭证XXXXXXXXXX已经记帐,表明冲销完成.以前物料凭证关联生成的会计凭证也相应的被冲销. 2.2)发票发票交验的取消 TCODE:MR8M 输入发票号码,冲销原因 保存即可. 提示需要手工清除会计的凭证的提示.表明已经无错误的冲销完成.然后要手工清除此两张凭证(它们是不能自动清账的). 3,SD的凭证冲销 3.1)SD发货凭证的冲销 注意:如果已经在系统中开票了,必须先冲销开票然后再冲销发货过帐.再才能按下列步骤进行SD发货凭证的冲销。 操作:TCODE:VL09 输入相应的界定条件 系统根据用户输入列出所有交货凭证。 用户选中相应要冲销的凭证点击工具条的“冲销”按钮,系统会出现“确实需要冲销次发货吗?”提示框,选择“OK”按钮确认。 3.2),发票的取消(在SD开发票的时候错误) 操作:TCODE:VF11  (如果要反记账冲销,则在S1类开票类别中“反记账”填写A/B) 输入要取消的发票号码 点击:保存   冲销完毕.
matinal
2020/11/14
2.2K0
SAP各种凭证的取消小结
SAP最佳业务实践:SD–可退回包装物销售(120)-4销售开票
一、VF04开票 在此步骤中,将出具客户发票。 1. 在 维护发票到期清单 屏幕中,进行以下输入: 字段 用户操作和值 注释 出具发票日期 例如,从昨天到今天以后的一个月 售达方 100000 与交货相关的 þ 2. 选择 显示开票清单。 3. 在 维护发票到期清单 屏幕上,系统将显示等待开票的交货单。 4. 选择早先创建的交货,然后选择个别出具发票凭证。 请参见以下内容的日志菜单路径:编辑 ® 日志: 1. 表示批次数量 HXX(例如 H21)与开票无关的项目。 2. 表示托盘与开票无关的项目
SAP最佳业务实践
2018/03/28
1.2K0
SAP最佳业务实践:SD–可退回包装物销售(120)-4销售开票
SAP FICO-财务模块入门介绍一
会 计 科 目表:合并科目表、运营科目表、集团科目表等,可供直接记帐的为运营科目表;
用户5495712
2019/05/29
7.2K0
SAP最佳业务实践:SD–客户寄售(119)-3寄售结算
一、VA01寄售发货订单 客户会定期报告所销售的商品数量或者当前库存中的商品数量(存货)。 输入记录寄售库存发货的相应订单。 为来自客户站点外部库存的发货创建开票凭证。 已在相应数量中输入客户售出的商品。输入订单时将执行物料的可用性检查。同时照常执行定价过程。 如果您已在系统中安装可退货处理业务情景并使用物料 H11,可能会出现如下警告信息:免费货物的最小数量1,000 PC还没有达到。请按 回车 略过该警告。 如果您不使用精益仓库管理 (WM),请通过如下路径选择存储地点不使用精益仓库管理进行装运(例如:
SAP最佳业务实践
2018/03/28
2.6K0
SAP最佳业务实践:SD–客户寄售(119)-3寄售结算
SAP最佳业务实践:ETO–项目装配(240)-10首付款开票结算
image.png VF01首付款开票 该活动的目的是为首付款出具发票。 角色销售开票员 后勤 ® 销售和分销 ® 出具发票 ® 开票凭证 ® 创建 1. 在 创建开票凭证屏幕的凭证字段中,输入4.1中创建的销售订单编号并选择 回车。 2. 在下面的屏幕上,选择 保存。 3. 系统显示消息 凭证 xxxxxxx 已保存。记录此凭证编号: _____________。 您已经对首付款开票。 VF03显示首付款开票 在此步骤中,显示刚创建的首付款开票。 角色销售开票员 后勤 ®销售和分销 ®出具发票 ®开票凭证
SAP最佳业务实践
2018/03/27
8550
SAP最佳业务实践:ETO–项目装配(240)-10首付款开票结算
SAP SD基础知识之与FI集成相关的流程与配置
SAP是一个高度集成的系统。业务上,财务是核心,销售是龙头。在SAP系统层面,销售与分销模块的业务与财务模块是高度集成的。
SAP虾客
2021/01/10
9440
SAP SD基础知识之与FI集成相关的流程与配置
SAP FI-应收业务处理方案
财务客户指无销售业务交易发生,仅因财务帐务处理而挂其他往来(如:其他应收款)的客户;
用户5495712
2019/05/29
2.8K0
SAP最佳业务实践:MM–有JIT交货计划的采购(230)-3收货&开票
4.5 MIGO收货 收货是指实际货物和物料的入库过程。收货通常来自于外部供应商或内部生产部门。所有收货都会增加库存。 此步骤仅用于物料H20,H21,看板物料R230-1的收货在业务情景 233–使用看板的重复制造 执行 已创建交货计划且采购物料可用。 后勤 -后勤执行-内向处理-采购订单,订单,其他事务的收货 -输入采购订单收货 1. 在初始屏幕上,输入以下数据: 字段名称用户操作和值注释无字段名称(第一个字段在主屏幕区域)A01 收货从输入帮助中选择操作无字段名称(第二个字段在主屏幕区域)R
SAP最佳业务实践
2018/03/28
2.7K0
SAP最佳业务实践:MM–有JIT交货计划的采购(230)-3收货&开票
SAP最佳业务实践:FI–应收帐款(157)-14银行对账-帐户对帐单的重新处理
4.14 FEBA_BANK_STATEMENT帐户对帐单的重新处理 每次过帐手动帐户对帐单时,都应当重新处理银行对帐单,由于原因代码未被输入,系统无法自动成功过账。同时,在客户还未付全部金额或者输入了错误参考号的情况下,此操作也很重要。因此,我们需要对银行对账单进行重新处理。 手动帐户对帐单已过帐。 角色:银行会计 会计核算-财务会计-银行-收款-银行对帐单 -后续处理 1. 在 凭借银行和帐户编号进行的银行兑帐单的选择 屏幕上,输入需要的数据。 字段名称用户操作和值注释公司代码1000 开户行已
SAP最佳业务实践
2018/03/29
2.8K0
SAP最佳业务实践:FI–应收帐款(157)-14银行对账-帐户对帐单的重新处理
SAP最佳业务实践:SD–按计划协议的销售(231)-4开票
一、VF04内部发票的开票 本活动用于对已发送的部件进行开票。当我们与我们的客户使用自开票业务情景,此处的开票并不传输给我们的客户。此开票凭证是产生未清项的必须的凭证,用于在被传输的自开票信息的后续检
SAP最佳业务实践
2018/03/28
2.8K0
SAP最佳业务实践:SD–按计划协议的销售(231)-4开票
SAP最佳业务实践:FI–总账(156)-6冲销
4.9 冲销凭证 本业务情景描述了冲销 FI 凭证的步骤。在这个过程中,系统将生成会计凭证、向现有凭证添加信息,并更新受影响的分类帐中的业务额。 系统支持下列类型的冲销: 单独冲销 批量冲销 FI 凭证已过帐,且必须进行冲销。 4.9.1 FB08冲消凭证 – 单个冲消 您可以冲销在财务会计中所创建的凭证。 凭证已过帐。 角色:总帐会计 会计核算 -财务会计 -总账 -凭证 -冲销 -单一冲销 1. 在 冲销凭证:抬头数据屏幕上,进行以下输入: 字段名称用户操作和值注释凭
SAP最佳业务实践
2018/03/28
2K0
SAP最佳业务实践:FI–总账(156)-6冲销
从SAP最佳业务实践看企业管理(185)-FI-157应收账款
FI157应收账款 该业务情景处理应收帐款中客户的过帐会计数据。客户在此处对数据进行排序,使数据对其他区域(如销售和分销系统)可用。当您过帐应收帐款中的数据时,系统创建凭证并将输入的数据传输到总帐。然后根据相关事务(应收款、预付款、贷项凭证等)客户付款活动,更新总帐(损益)科目和客户帐户。通过帐户过帐并管理所有业务事务,并为此创建客户主数据记录。使用一次性客户,以避免建立庞大的主数据量。 业务处理科目应收款包含以下主要活动: · 过帐预付款请求 · 手动过帐预付款 · 过帐客户发票 · 使用发票参考过帐贷项
SAP最佳业务实践
2018/03/27
1.7K0
SAP 客户信贷重建一则
前段时间接到业务的一个需求,需要将标准和定制业务的信贷分开。原来目前公司是将标准和定制的客户信贷金额整在一起,共用一个信贷范围。而定制业务特殊性决定了公司要收到客户全款才会接单生产并发货,而客户打预收款的时候是不分标准和定制的。
SAP梦心
2019/06/24
9170
SAP 客户信贷重建一则
SAP 供应商发票校验业务核算业务
财务人员根据商务采购人员提供的预制发票凭证信息,核对数量、金额、税额、品名等信息;
用户5495712
2024/07/10
8530
SAP 供应商发票校验业务核算业务
SAP最佳业务实践:SD–现金销售(238)-3发票
一、 VF01开票 开票表示销售和分销中业务事务已完成。 1. 请选择以下导航选项之一访问该事务: 2. 在 创建开票凭证 屏幕上,输入4.1步骤中的销售订单编号。 3. 要处理该
SAP最佳业务实践
2018/03/28
9030
SAP最佳业务实践:SD–现金销售(238)-3发票
SAP最佳业务实践:无变式配置按订单生产(148)-8产成品交货开票
1、交货处理 在此活动中,向客户交货产成品。 产成品 (F226) 的交货在销售订单处理:自库存销售 – 109 的业务流程文档中描述。 要执行此活动,请使用本文档中的主数据执行以下步骤(另请参见下表
SAP最佳业务实践
2018/03/27
1.7K0
SAP最佳业务实践:无变式配置按订单生产(148)-8产成品交货开票
SAP最佳业务实践:SD–潜在客户销售订单处理(113)-3发货、发票
VL10C交货到期清单 在本活动中,处理交货到期清单,以便创建交货凭证。 角色仓库文员 后勤 →后勤执行→外向处理→外向交货的发货→外向交货→创建→交货凭证到期日的集中处理→销售订单项目 1. 在 销
SAP最佳业务实践
2018/03/27
1.6K0
SAP最佳业务实践:SD–潜在客户销售订单处理(113)-3发货、发票
SAP软件系统中信用控制功能详解
声明:网络资源,本文章仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP软件,相应著作权归SAP所有。)
齐天大圣
2021/02/24
2.3K0
推荐阅读
相关推荐
SAP SD 销售开票处理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验