本文只为笔者个人笔记,学习使用。

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