4. 控制语句执行流程
4.1 if语句
4.1.1 if基础语法
if <条件>:
<语句>
当条件为真时执行其后缩进的语句,否则跳过缩进语句。条件可以是任意表达式,冒号“:”不能省略。
比如:
x=5
if x<0:
x=-x
print(x)
运行结果是5。
if <条件>:
<语句1>
else:
<语句2>
当条件为真时执行其后缩进的语句1,否则执行else之后缩进的语句2。
if <条件>:
<语句1>
elif <条件2>:
<语句2>
else:
<语句3>
当条件1为真时执行其后缩进的语句1,条件2为真时执行其后缩进的语句2,条件1和条件2都不成立时否则执行else之后缩进的语句3。
可以以此类推增添更多的 elseif。
如果执行到某个条件x 成立了,则就执行对应的语句x,然后跳出 if 语句,其后都不会在运行和判断了。
4.1.2 if语句的嵌套
if <条件A>:
if <条件1>:
<语句1>
elif <条件2>
<语句2>
else:
<语句A>
比如:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
a=int(input("请输入一个整数:")) if a>0: if a>10000: print("数字太大,无法表示") else: print("数字大小合适,可以表示") print("且大于0") else: if a<-10000: print("数字太小,无法表示") else: print("数字大小合适,可以表示") print("且小于0") |
建议语句嵌套不要太深,尽量减少嵌套层次,方便阅读和理解程序,但如果逻辑清晰,则不必有意减少。
1 2 3 4 5 6 7 8 9 |
a=int(input("请输入一个整数:")) if a>10000: print("数字太大,无法表示") elif 0<a<=10000: print("数字大小合适,可以表示,且大于0") elif -10000<a<0: print("数字大小合适,可以表示,且小于0") elif a<-10000: print("数字太小,无法表示") |
4.2 for 循环
Python语言的for语句和其他语言很不一样,其他语言(比如C语言)的for语句要用循环控制变量来控制循环,而Python中for语句是通过循环遍历某一序列对象(比如元组、列表、字典等)来构建循环,循环结束的条件就是对象被遍历完成。
4.2.1 for基础
基本语法
for <循环变量> in <遍历对象>:
<语句1>
else:
<语句2>
注:for语句的语义是遍历for语句中的遍历对象,每次循环,循环变量会得到遍历对象中的一个值,你可以在循环体中处理它。一般情况下,当遍历对象中的值全部用完时,就会自动退出循环。语句1就是for语句中的循环体,它的执行次数就是遍历对象中值的数量,else语句中的语句2只有在循环正常退出(正常退出是指便利万所有遍历对象中的值)时执行。
1 2 3 4 |
for i in [1,2,3,4,5]: print("这是第 %d 次循环" % (i),"它的平方是",i*i) else: print("循环结束") |
4.2.2 if语句与break语句、continue语句
berak: 中断循环的执行,即便依然有未遍历的数据,也会立即终止所有循环。
continue: 终段本次循环,之后的执行语句都不再执行,直接进入下一循环。
比如:
1 2 3 4 5 6 7 8 9 |
for i in [1,2,3,4,5]: print(i) if i==2: continue print(i,"的平方是:",i*i) if i==4: break else: print("循环结束!") |
执行结果是:
1
1 的平方是: 1
2
3
3 的平方是: 9
4
4 的平方是: 16
(我们看到,2之后没有执行的语句结果,因为被continue跳过了,也没有5的执行结果,因为被break中断了所有循环了)
字典既有“键”又有“值”,for语句遍历字典时是通过字典的item( )、keys( )、values( )等方法分别遍历其“键和值”、“键”、“值”的。如果要同时遍历键和值,在遍历时可以使用两个循环变量来分别接收键和值。
比如:
1 2 3 4 5 6 7 |
a_dict= {'apple':10, 'banana':20, 'candy':30} for key,value in a_dict.items(): #遍历键和值 print(key,':',value) for key in a_dict.keys(): #只遍历键 print(key) for value in a_dict.values(): #只遍历值 print(value) |
运行后得到:
candy : 30
banana : 20
apple : 10
candy
banana
apple
30
20
10
4.2.3 for语句与range( )函数
for语句使用range( )函数可以构建可控循环次数的循环程序。
range( )可以产生数列表,函数原型是: range( [start,] stop [,step] ) 。产生的整数序列的最大值为stop-1 。它并不是在调用时一次生成整个序列,而是遍历一次才产生一个值,以减少内存的占用,其本质是一个迭代器。
- start 可选参数,起始数,不写的话默认是0
- stop 终止数,如果range只有一个参数x,那么range产生一个从0至x-1的整数列表
- step 可选参数,步长
比如:
1 2 3 4 5 6 |
import string,random capta='' words=''.join((string.ascii_letters,string.digits)) for i in range(10): capta+=random.choice(words) print(capta) |
这个例子是生成10位的大小写加数字的字符串。这是书本的1.7节的2.2练习题的代码。
4.2.4 for语句与内置迭代函数
Python内置了以下几种迭代函数,方便实用。
enumerate(seq)
sorted(seq)
reversed(seq)
zip(seq1,seq2,…)
4.3 用while循环执行语句
用以构造不确定次数的循环结构。
4.3.1 语法
while <条件>:
<语句1>
else:
<语句2>
与for循环不同,while语句只有在测试条件为假的时候才停止,否则会无限运行甚至死机。因此必须写好跳出循环的语句。因此,一般都不用while来控制循环,避免出错。但是有时候我们在特定情况下必须用while。
它也可以使用elif、break、continue语句。
4.3.2 增量赋值运算符
和C语言的意思一样,有 +=、-=等运算。除此之外,基本的运算符都有其增量赋值运算符:
+、-、*、/、//、**、%、&、|、^、>>、<< 。
用增量赋值运算符时,注意前后变量要是同一类型。
4.4 推导或内涵(list comprehension)
就是对序列中的数据进行处理得到另一组数据序列。
4.4.1 推导基础
典型语法:
[ <i 相关表达式> for i in aiterator ]
aiterator是一个可遍历的对象。
4.4.2 推导进阶
可以使用if语句进行有选择的推导。