3.2条件控制语句
3.2.1 if语句
格式如下:
if condition:
pass
若condition为True,则执行下面的语句pass;pass前必须有4个空格(一般Tab键会占4个空格),其表示是if的代码块。其中pass是Python中的关键字,表示空语句或占位语句。
在后面的学习中,由于代码量较大,将使用vs code来编辑代码。
例1:
'''
模块声明:流程控制语句if
'''
print('Start')
a = 1
if a:
print('it is True')
print('End')
运行结果:
Start
it is True
End
例2:
'''
模块声明:流程控制语句if
'''
print('Start')
a = 1
b = 2
if a < b:
print('a = %d, b = %d' %(a, b))
print('a < b')
print('End')
运行结果:
Start
a = 1, b = 2
a < b
End
代码中,if语句下的2个print都是属于if的代码块。
3.2.2 if...else...语句
格式如下:
if condition:
pass
else:
pass
例1:
'''
模块声明:流程控制语句if
'''
print('Start')
a = 1
b = 2
if a < b:
print('a < b')
else:
print('a >= b')
print('End')
运行结果:
Start
a < b
End
例2:嵌套if语句
'''
模块声明:流程控制语句if
'''
print('input a number')
a = input()
a = int(a)
if a == 1:
print('learn English')
else:
if a == 2:
print('watch TV')
else:
if a == 3:
print('play game')
else:
if a == 4:
print('go shopping')
else:
print('go to sports')
运行结果:
input a number
2
watch TV
由于input()函数返回的是字符串,因此需要将str转换成int。
3.2.3 if...elif...else...语句
格式如下:
if condition1:
pass
elif condition2:
pass
else:
pass
将3.2.2中的例2用elif修改,如下所示。
'''
模块声明:流程控制语句if
'''
print('input a number')
a = input()
a = int(a)
if a == 1:
print('learn English')
elif a == 2:
print('watch TV')
elif a == 3:
print('play game')
elif a == 4:
print('go shopping')
else:
print('go to sports')
运行结果:
input a number
2
watch TV
elif语句类似于C++中的switch语句。
3.3循环控制语句
3.3.1 while语句
格式如下:
while expression:
pass
当expression为True时,执行pass代码块。
例:
'''
模块声明:流程控制语句while
'''
print('input a number')
a = input()
a = int(a)
while a < 10:
print('a = %d'%a)
a += 1
运行结果:
input a number
3
a = 3
a = 4
a = 5
a = 6
a = 7
a = 8
a = 9
3.3.2 while...else...语句
格式如下:
while expression:
pass
else:
pass
例:
'''
模块声明:流程控制语句while
'''
print('input a number')
a = input()
a = int(a)
while a < 10:
print('a = %d'%a)
a += 1
else:
print('a >= 10')
运行结果:
input a number
10
a >= 10
3.3.3 for语句
格式如下:
for target_list in expression_list:
pass
for语句是用来遍历序列(字符串、列表、元组)、集合和字典。每遍历一次,将expression_list中的元素赋值给target_list,并执行pass代码块。
例1:
'''
模块声明:流程控制语句for
'''
l = [1,2,3,4,5]
for a in l:
print(a)
运行结果:
1
2
3
4
5
由于执行print函数,默认参数end = ‘\n’,因此每执行一次换行。
例2:
'''
模块声明:流程控制语句for
'''
l = [('卡兹克','盲僧','伊芙琳','蜘蛛'),{1,2,3},4,5,6]
for a in l:
if isinstance(a,(str,list,tuple,set,dict)):
for b in a:
print(b,end = ' | ') #默认情况下:end = '\n'
else:
print(a,end = ' | ')
运行结果:
卡兹克 | 盲僧 | 伊芙琳 | 蜘蛛 | 1 | 2 | 3 | 4 | 5 | 6 |
当expression_list内还含有序列、集合、字典时,可以使用上述的方法来遍历内部的每一个元素。
3.3.4 for...else...语句
格式如下:
for target_list in expression_list:
pass
else:
pass
例:
'''
模块声明:流程控制语句for
'''
l = [('卡兹克','盲僧','伊芙琳','蜘蛛'),{1,2,3},4,5,6]
for a in l:
if isinstance(a,(str,list,tuple,set,dict)):
for b in a:
print(b,end = ' | ') #默认情况下:end = '\n'
else:
print(a,end = ' | ')
else:
print('\n遍历结束')
运行结果:
卡兹克 | 盲僧 | 伊芙琳 | 蜘蛛 | 1 | 2 | 3 | 4 | 5 | 6 |
遍历结束
3.3.5 range函数
用法1:range(stop)表示生成一个从[0,stop)的数字序列。
>>> print(range(5))
range(0, 5)
>>> print(list(range(5)))
[0, 1, 2, 3, 4]
>>> print(tuple(range(5)))
(0, 1, 2, 3, 4)
>>> print(set(range(5)))
{0, 1, 2, 3, 4}
用法2:range(start, stop[, step])表示生成一个从[start,start+step,start+2*step,...,stop)的数字序列,起步长为step;若step未定义则默认为1。
>>> print(list(range(5,13)))
[5, 6, 7, 8, 9, 10, 11, 12]
>>> print(list(range(5,13,3)))
[5, 8, 11]
问题1:执行一个代码块100次,该怎么编辑代码?
方法1:创建一个0-99的列表,然后使用for遍历,每遍历一次执行一次代码块。缺点是0-99的列表要写很久。
方法2:使用range创建0-99的序列,代码如下。
'''
模块声明:流程控制语句for和range
'''
for a in range(0,100,1):
print('a = %d'%a,end = ' ')
问题2:如何打印一个序列偶数下标的元素?
方法1:使用for循环遍历序列的每一个元素,然后选择偶数下标的元素进行打印。缺点是太过于繁琐。
方法2:使用range来创建从0开始的偶数序列,然后用for从range中取出元素,最后打印。
'''
模块声明:流程控制语句for和range
'''
l = [1,2,3,4,5,6,7,8,9]
for a in range(0,len(l),2):
print('l[%d] = %d'%(a,l[a]))
运行结果:
l[0] = 1
l[2] = 3
l[4] = 5
l[6] = 7
l[8] = 9
3.3.6 break和continue语句
break用于循环控制语句中,作用是终止并跳出离break最近的循环语句。
例1:
'''
模块声明:流程控制语句for
'''
l = [1,2,3,4,5,6,7,8,9,10]
for a in l:
if a == 6:
break
else:
print('a = %d'%a)
else:
print('end')
运行结果:
a = 1
a = 2
a = 3
a = 4
a = 5
例2:
'''
模块声明:流程控制语句for和while
'''
l = [1,2,3,4,5,6,7,8,9,10]
for a in l:
while a >= 6:
break
else:
print('a = %d'%a)
else:
print('end')
运行结果:
a = 1
a = 2
a = 3
a = 4
a = 5
end
为什么例2就打印出了end,而例1没有打印?
当执行break时,若循环语句带有else分支,则else下的语句也不会执行。因此例1种跳出for循环后,不执行else下的print('end'),直接退出。
例2中,break跳出的while循环语句,因为while离break最近。
continue也是用于循环语句中,用于结束本次循环,立即开始下一次循环。
'''
模块声明:流程控制语句for和continue
'''
l = [1,2,3,4,5,6,7,8,9,10]
for a in l:
if a >= 3 and a <= 8:
continue
else:
print('a = %d'%a)
else:
print('end')
运行结果:
a = 1
a = 2
a = 9
a = 10
end