控制结构与函数
2021-11-25叶鹏沈晓恬
叶鹏 沈晓恬
在上一期,菩提老祖传授了python的基本运算符,但只掌握这些是远远不够的。菩提老祖用拂尘指指悟空,继续他的教学工作。
“如你与人争斗时一样,不可能只使用一招基本招式,也不可能每次使用一模一样的打法。在程序中,也必然要用到一些结构,来控制程序如何执行各种操作,这种结构称为控制结构。”
顺序结构
“我不是很明白,”悟空似懂非懂,眼中露出些许迷茫之色。
“待我仔细讲解一下。”
“程序中一般有3种控制结构,顺序结构、分支结构、循环结构。顺序结构最容易理解,一行行程序按顺序执行,做完一行,再做下一行。顺序结构不需要特别的控制语句。”
悟空点头表示明白。
“分支结构中,需要加判断条件,判断满足何种条件时做什么事情。”
分支结构
“那么,吃桃子的时候,判断桃毛是否蹭干净,就是分支结构语句?”悟空问道。
“不错!”菩提老祖接着说,“Python中的分支结构语句使用if...elif...else的方法来表达。”
# 分支结构
# if
a = 1
if a == 1:
print('此时a等于1')
# if...else
a = 2
if a == 1:
print('此时a等于1')
else:
print('此时a不等于1')
# if...elif...else
a = 2
if a == 1:
print('此时a等于1')
elif a == 3:
print('此时a等于3')
else:
print('此时a等于2')
# if...elif...elif...else
a = 2
if a == 1:
print('此時a等于1')
elif a == 3:
print('此时a等于3')
elif a == 4:
print('此时a等于4')
else:
print('此时a等于2')
# if嵌套
a = 2
b = 5
if a == 2:
if b == 3:
print('此时a等于2,b等于3')
else:
print('此时a等于2,b不等于3')
else:
print('此时a不等于2')
如果a等于1,打印此时a等于1。
如果a等于1,打印此时a等于1;否则打印此时a不等于1。
如果a等于1,打印此时a等于1;又如果a等于3,打印此时a等于3;否则打印此时a等于2。
如果a等于1,打印此时a等于1;又如果a等于3,打印此时a等于3;又如果a等于4,打印此时a等
如果a等于2时:b等于3,打印此时a等于2,b等于3;否则打印此时a等于2,b不等于3。否则(如果a不等于2)打印此时a等于2。
“简单!”猴子挺得意。
“你这猴头可得看仔细,if或者elif后面跟的表达式里,判断是否相等时,可得用两个等号。这是一个比较运算符。”
“师父不说我还真没注意呢!”悟空挠着后脑勺讪笑着。
“if和elif后的条件表达式如果成立,则会执行此分支程序;如果不成立,则不会;如果所有条件都不成立,则会进入else分支。”
“第三种控制结构称为循环结构,如果同样的操作被反复执行,便可以使用循环结构。”菩提老祖继续讲解。
循环结构
“师父,这俺就不明白了,既然同样的操作被反复执行,为什么不把同样的代码多写几遍,反正也不费事。”悟空发问。
菩提老祖一笑:“写程序时可不一定知道要执行几次,万一要执行个千百次,你还真在程序中抄那么多次?而且使用循环结构,你可以动态地控制循环的次数。”
“此话怎讲?”猴子问。
“比如一段吃桃子的程序,有一筐桃子,你要用程序把它吃完。如果写程序的时候,已经规定能吃的桃子个数,那么筐里的桃子多了你会吃不完,少了你又不够吃。只有在程序开始运行之后,根据筐里桃子的数量来决定吃几个桃子,才会刚刚好。”
“哦!”猴子大彻大悟,“要是现在有一筐桃子就太好了!”
在Python中,循环结构大致可以分成两种,一种是遍历循环,一种是无限循环。
所谓遍历循环就是遍历某一个结构形成的循环运行方式。具体说来,比如有一个列表,里面包含了1~20的数字,基于这个列表进行的遍历循环,就会执行20次。
无限循环是由条件控制的循环方式,反复执行代码,一直到不满足循环条件为止。
以猴子吃桃子的故事来举例,遍历循环就是先看看筐里有几个桃子,挨个儿拿出来吃。无限循环就是看看筐里还有没有桃子,有就拿出来吃,没有就停止循环。
遍历循环的语法使用for...in...,无限循环的语法使用while。
[list1 = [1,2,"a"]
for i in list1:
print(i) ]
[i = 0
while i<3:
print(i)
i = i + 1 ]
Python中for和while并没有本质的区别,只是实际使用中针对性不同。
如果执行过程中要退出循环,可以使用break和continue语句。break会退出整个循环部分代码,continue則会跳过当前这次执行的代码,继续下一次循环。
break:
[i=0
while i<5:
i=i+1
if i%2==0:
print("把它吃掉!")
break
print("擦擦桃子,") ]
continue:
[i=0
while i<5:
i=i+1
if i%2==0:
print("把它吃掉!")
continue
print("擦擦桃子,") ]
说到这里,性急的猴子觉得自己已经掌握了Python的基本用法,迫不及待地想要试试手。
菩提老祖怎会不知道这猴子的心思,不过还有点重要的东西没有讲完。
“悟空,想要成为高手,光是上面讲的内容还不够。”
这话吊起了猴子的好胜心。“哦?还有什么?”
“所谓高手,都有自己的绝招,这绝招通常是由一串基本招式构成,高手们将其练熟,在某些特定场合一并使出。你当年不是有一招叫做“万棍朝宗”吗?在瞬间挥出一万棍,打击在一个点上。”
“嗯,师父讲的没错!Python中也有这样的绝招吗?”
“Python中有个东西叫作函数,这就相当于绝招。”菩提老祖接着说道,“函数是组织好的,可重复使用,用来实现单一或相关联功能的代码段。”
“明白,函数就是带名字的代码块。好比俺老孙平时练熟一串招式,这就是一个代码块,俺给它起个名字叫万棍朝宗,就是函数名了。等对敌时候,俺大喝一声,把这大招使出来,这就是调用函数!”悟空又兴奋起来。
“孺子可教也。”菩提老祖捻须微笑。
Python使用def语法来定义函数。其中可以没有参数和返回值。函数名的要求和变量名的要求一样,首字以字母和下划线开头,后续由中英文字母、下划线和数字组成,大小写敏感。
[def 函数名 (参数):
功能代码
return 返回值 ]
下面是一个函数的简单例子:
[def wangunchaozong(t):
for i in range(t):
print("打一棍")
return i+1
goal = 10
actual = wangunchaozong(goal)
print("实际打了几棍?")
print(actual)
]
Python自带大量常用函数,文中出现的最常用的print函数就被用来将变量显示到输出窗口中。同时世界上众多的Python开发者们也贡献出巨量的函数库,可以方便地让人们实现各种功能。
具体如何实现?请看下回分解!