本文只为笔者个人笔记,学习使用。
Python控制语句详解
程序设计中的控制语句有三种,即顺序、分支和循环语句。Python程序通过控制语句来管理程序流,完成一定任务。
- 分支语句:if
- 循环语句:while、for
- 跳转语句:break、continue、return
elif结构测试
由于之前的章节已经使用过if/if else两种结构的语句了,所以在此省略不写,此时只书写elif结构的语句,elif语法结构如下所示:
if 条件1:
语句1
elif 条件2:
语句2
elif 条件3:
语句3
else:
语句4
相关代码如下所示:
score = 100print(type(score))if score >=90:grade = 'A'elif score >= 80:grade = 'B'elif score >= 70:grade = 'C'else:grade = 'GG'print(grade)
Python之中没有Java所涵盖的三元运算符,Python内通常用条件表达式来替代相类似的功能。
条件表达式测试
条件表达式结构如下所示:
表达式1 if条件else表达式2
`1026.py` 代码如下所示:
score = 100print(type(score))result = '及格' if score >-60 else '不及格'print(type(result))print(result)
条件表达式测试运行结果
while循环测试
while循环用来进行条件判断,再进行循环的循环语句,结构如下所示:
while 循环条件:
语句
[else:
语句]
`1027.py`代码如下所示:
i = 0while i*i <100_000:i+=1print("i = {0}".format(i))print("i*i = {0}".format(i*i))
整数和浮点数均可添加多个0或下划线以提高程序的可读性,如000.01563和_360_000,两种格式均不会影响实际值。一般是每三位加一个下划线。上述代码的目的是找到平方小于100_000的最大整数,使用while循环需要注意while循环只能写一个表达式,而且是一个布尔类型的表达式,那么如果循环体中需要循环变量,则必须在while语句之前对循环变量进行初始化,本例中先给i赋值为0,然后必须在循环体内部通过语句更改循环变量的数值,否则将会发生死循环。
while循环测试运行结果
for循环测试
for语句是应用最广泛、功能最强的循环语句。它的for循环类似于java的foreach循环,只用于序列、字符串、列表、元组。for循环结构如下所示:
for 迭代变量in序列:
语句组
[else:
与剧组]
所有的实现序列的类型都可以使用for循环。“迭代变量”是从序列中迭代取出的元素。for循环中也可以带有else语句。
`1028.py` 代码如下所示:
print("-"*10+"范围")for num in range(1,10):print("{0}*{0}={1}".format(num,num*num))print("-"*10+"字符串")for item in 'hello':print(item)# 声明整数列表numbers = [43, 32, 54, 54, 65, 7, 10]print("-"*10+"整数列表")for item in numbers:print("Count is :{0}".format(item))
字符串`hello`也是一个序列,所以可以用for循环变量。range(1,10)函数是创建范围(range)对象,它的取值是1<=range(1,10)<=10,总共10个整数。范围也是一种整数序列。
for循环测试运行结果
----------范围
1*1=1
2*2=4
3*3=9
4*4=16
5*5=25
6*6=36
7*7=49
8*8=64
9*9=81
----------字符串
h
e
l
l
o
----------整数列表
Count is :43
Count is :32
Count is :54
Count is :54
Count is :65
Count is :7
Count is :10
continue语句测试
break语句实在太简单了,这里就略过不说了,只不过是个判断之后直接跳出循环。这里拿一个continue语句的测试例子。
continue语句用来结束本次循环,跳过循环体中尚未执行的语句,接着进行终止条件的判断,以决定是否继续循环。
`1029.py` 代码如下所示:
for item in range(10):if item == 3:continueprint("count is :{0}".format(item))
continue语句测试运行结果
count is :0
count is :1
count is :2
count is :4
count is :5
count is :6
count is :7
count is :8
count is :9从上述运行结果可以看出,当条件item == 3的时候执行continue语句,continue语句会终止本次循环,循环体中continue之后的语句将不再执行,记着进行下次循环,所以输出结果中没有数字3。
循环中的else测试
前文中都有提到过,循环体中可以增加else结构体,它与if语句中的else不同。这里else是在循环体正常结束时才运行的代码,当循环被中断时不执行,break、return和抛出异常都会中断循环。
`1030.py` 代码如下所示:
i = 0while i*i
循环中的else测试运行结果
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
While Over!
----------
count is :0
count is :1
count is :2上述代码中,由于for循环被break出去了,所以没有输出else中的内容。满足break则不会进入else,与java的finally有一些区别。
迭代器测试
迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和next()。字符串,列表或元组对象都可用于创建迭代器。
`1031.py` 代码如下所示:
list=[1,2,3,4]it = iter(list) # 创建迭代器对象print (next(it)) # 输出迭代器的下一个元素print (next(it)) # 输出迭代器的下一个元素
迭代器测试运行结果
1
2
迭代器常规遍历如下所示:
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
for x in it:
print (x, end=" ")
也可以使用 next() 函数:
import sys # 引入sys模块
list=[1,2,3,4]
it = iter(list) # 创建迭代器对象
while True:
try:
print (next(it))
except StopIteration:
sys.exit()
生成器测试
在一个函数中经常使用 return 关键字返回数据,但是有时候会使用yield关键字返回数据。使用yield关键字的函数返回的是一个生成器(generator)对象,生成器对象是一个可迭代对象。
yield 生成器(generator)跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行next()方法时从当前位置继续运行。以下实例使用yield实现斐波那契数列:
import sysdef fibonacci(n): # 生成器函数 - 斐波那契a, b, counter = 0, 1, 0while True:if (counter > n):returnyield aa, b = b, a + bcounter += 1f = fibonacci(10) # f 是一个迭代器,由生成器返回生成while True:try:print(next(f))except StopIteration:sys.exit()
生成器测试运行结果
0
1
1
2
3
5
8
13
21
34
55