通过之前的学习,我们已经接触到了一些语句,Python 忠实地按照语句的顺序执行它们。如果你想要改变语句流的执行顺序,必须通过控制流语句实现。在 Python 中有三种控制流语句 —— if、for 和 while 。这节重点阐述流程控制语句,外送自定义函数。
if 语句用来检验一个条件,如果条件为真,则运行一块语句(称为 if-块),否则处理另外一块语句(称为 else-块)。else 子句是可选的。
'''
if 判断条件:
执行语句……
else:
执行语句……
这里用到了第一章说到的缩进的概念
'''
# if语句后面必须有 :
# :后面的语句自动缩进
# if语句写完后,要退回原有缩进继续写
# Python代码的缩进规则:具有相同缩进的代码被视为代码块
type = 'animal'
if type == 'animal':
print('这是一个动物')
print('if-块结束') #这两个print语句是同一代码块
print('Finished!')
| 输出:这是一个动物
if-块结束
Finished!
flag = False
name = 'Java'
if name == 'python': # 判断变量否为'python'
flag = True # 条件成立时设置标志为真
print( 'welcome man') # 并输出欢迎信息
else:
print(name) # 条件不成立时输出变量名称
| 输出:Java
type = 3
if type == 1: # 判断 type 的值
print('boss')
elif type == 2:
print('leader')
elif type == 3:
print('manager')
elif type <= 0: # 值小于等于零时输出
print('error')
else:
print('employee') # 条件均不成立时输出
| 输出:manager
# 判断值是否在0~10之间
# 输出结果: right
num = 5
if num >= 0 and num <= 10:
print( 'right')
# 判断值是否在小于0或大于10
# 输出结果: error
num = 6
if num < 0 or num > 10:
print( 'right')
else:
print( 'error')
# 判断值是否在0~10或者20~35之间
# 输出结果: error
num = 8
if (num >= 0 and num <= 10) or (num >= 20 and num <= 35):
print( 'right')
else:
print( 'error')
| 输出:right
error
right
注:在 Python 中没有 switch 语句。你可以使用 if…elif…else 语句来完成同样的工作(在某些场合,使用字典会更加快捷。)
#I love you!循环输出3次
for i in range(3):
print('I love you !')
| 输出:I love you !
I love you !
I love you !
#嵌套循环
for i in range(2):
for j in range(2):
print(i,j)
| 输出:0 0
0 1
1 0
1 1
# 通过 for 循环来遍历序列、映射
# 遍历list
lst = list(range(6))
for i in lst[::2]:
print(i)
# 遍历字典
money = {'Kyle':'40W', 'Tommy':'10W', 'avlis':'45W', 'Lucy':'8W'}
for name in money:
print(name , '工资为:%s' % money[name])
| 输出:0
2
4
Kyle 工资为:40W
Tommy 工资为:10W
avlis 工资为:45W
Lucy 工资为:8W
count = 0
while count < 3:
print(count, " 比3小")
count = count + 1
else:
print(count, " 不比3小")
print( "再见!")
|输出:0 比 3 小
1 比 3 小
2 比 3 小
3 不比 3 小
再见!
注意:避免如下的无限循环程序
count = 1
while count == 1 :
value = input("Enter a number :")
print( "You entered: ", value)
print( "Good bye!")
break: 在语句块执行过程中终止循环,并且跳出整个循环
continue:在语句块执行过程中跳出该次循环,执行下一次循环
pass: pass是空语句,是为了保持程序结构的完整性
# break语句用来终止循环语句,即便循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句。
s = 0
num = 1
while num > 0:
s += num
num += 1
if num == 10:
break
print(s)
s = 0
for i in range(10):
for j in range(5):
if j > 2:
break; #跳出内层的循环,打印s的值以后,继续外层循环,外层循环再调用内层循环
s = s + (i*j)
print('第%i-%i次计算' %(i,j))
print('此时i=%i,sum=%i' % (i,s))
if s > 8:
break #s大于8时,跳出外层循环,打印结果,结束
print('结果为%i' % s)
| 输出:
45
第 0-0 次计算
第 0-1 次计算
第 0-2 次计算
此时 i=0, sum=0
第 1-0 次计算
第 1-1 次计算
第 1-2 次计算
此时i=1, sum=3
第 2-0 次计算
第 2-1 次计算
第 2-2 次计算
此时 i=2, sum=9
结果为 9
# continue 语句用来告诉Python跳过当前循环的剩余语句,然后继续进行下一轮循环。
lst = []
for i in range(10):
if i%2 == 0: #为奇数时,跳过,不添加在列表中
lst.append(i)
else:
continue
print('第%i次添加'%(i/2 + 1))
print('结果为:', lst)
| 输出:
第 1 次添加
第 2 次添加
第 3 次添加
第 4 次添加
第 5 次添加
结果为: [0, 2, 4, 6, 8]
# pass是空语句,在特定环境下保持程序结构的完整性,用得少。
for r in 'Python':
if r == 'h':
pass
print( '当前字母 :h,但是我pass了')
print( '当前字母 :', r)
print( "Good bye!")
| 输出:
当前字母 : P
当前字母 : y
当前字母 : t
当前字母 : h,但是我pass了
当前字母 : h
当前字母 : o
当前字母 : n
Good bye!
Python 中通过 def 语句来自定义函数
def fun1(x,y):
if x > 0:
print('输入值的和为%i' % (x+y))
else:
print('输入有误')
fun1(10,2)
| 输出:输入值的和为 12
def f1(x):
y = 2*x # 没有return
def f2(x):
y = 2*x
return y # 含有return
print(f1(2),f2(2)) # return语句退出函数,并返回一个表达式。不带参数值的return语句返回None
| 输出:None 4
# n = 2,这里n的默认值为2,如果不输入则以默认值为主
def f(x,n = 3):
return(x**n)
print(f(10))
print(f(10,2))
# 通过*来定义可变参数
def f(*x):
print(x)
return x
f(10)
f('m','n')
f(1,2,3,[6,78])
# 默认会把可变参数传入一个元祖!
print(type(f('a','b')))
| 输出:
1000
100
(10,)
(‘m’, ‘n’)
(1, 2, 3, [6, 78])
(‘a’, ‘b’)
def f(s):
s = '局部变量赋值' # 函数作用:把输入变量指向“局部变量赋值”
print("函数内为局部变量:%s" % s)
a = 10
f(a)
print("执行函数后全局变量不变:%s" % a)
def f2():
global b
b = '这是全局变量'
print("函数内转为全局变量:%s" % b)
b = 10
print("全局变量值b初始值:%s" % b)
f2()
print("执行函数后b的值变了:%s" % b)
| 输出:
函数内为局部变量:局部变量赋值
执行函数后全局变量不变:10
全局变量值b初始值:10
函数内转为全局变量:这是全局变量
执行函数后b的值变了:这是全局变量
匿名函数Lambda
# def创建自定义函数,求和
def fun(x,y):
return x+y
print(fun(2,3))
#等同于如下lambda函数,lambda只有一行
f = lambda a,b:a+b
print(f(2,3))
| 输出:5 5