python同样提供了现代编程语言都支持的两种基本流程控制结构:分支结构和循环结构,其中分支结构用于实现根据条件来选择性的执行某段代码,循环结构则用于实现根据循环条件重复执行某段代码,Python使用if语句提供分支支持,提供了while,for in循环,也提供了break和continue来控制程序的循环结构。
2.1 顺序结构
在任何编程语言中最常见的程序结构就是顺序结构,程序从上到下一行行执行,中间没有任何跳转
2.2 分支结构
与其他编程语言一样,python 的条件控制语句也是if elif else,比较简单,if分支使用布尔表达式或者布尔值作为分支条件来进行分支控制,下面介绍其用法
例2.1 if 语句
#!usr/bin/python3
if 3 > 2:
print("hahahaha")
结果:
hahahaha
例2.2 if语句
#!usr/bin/python3
age_str = input("please input your age")
age = int(age_str)
if age > 20:
print("age > 20")
结果:
please input your age30
age > 20
if 关键字后面不一定非要是bool型值,字符串、列表等都可以,这种情况下,空字符串,空列表会被当成False,即
False、None、0、""、()、[]、{} 都会被当做False处理,如下所示:
例2.3
#!usr/bin/python3
s = ""
if s:
print("s 不是空字符串")
else:
print("s 是空字符串")
lists = []
if lists:
print("lists 不是空列表")
else:
print("lists 是空列表")
结果:
s 是空字符串
lists 是空列表
例2.4 if else语句
#!usr/bin/python3
if 3 > 4:
print("haha")
else:
print("hehe")
结果:
hehe
例2.5 if elif else语句
#!usr/bin/python3
if 3 > 4:
print("haha")
elif 3 > 2:
print("hehe")
else:
print("heihei")
结果:
hehe
2.1.4 pass语句
有时候python程序需要占一个位置,但是又不需要做什么事,这个时候就需要使用pass语句了,例如:
例2.6
#!usr/bin/python3
a = 30
if a > 10:
print("a > 10")
elif a < 10:
pass #什么也不做
else:
print("a == 10")
结果:
a > 10
2.1.5 断言
断言也是一种特殊的分支,常用于自动化测试,对逻辑表达式进行判断,如果逻辑表达式返回False,则会报AssertionError错误,下面的语句也不会执行
例2.7
#!usr/bin/python3
age = 30
assert age > 40 #这行断言会报AssertionError错误
print("haha") #这行不会执行,因为上面的断言不通过
结果:
Traceback (most recent call last):
File "/Users/haha/source/builder/builder/handler/test.py", line 3, in <module>
assert age > 40
AssertionError
2.2 循环语句
与其他编程语言一样,python的循环语句也用while和for
2.2.1 while循环
例2.8 使用while循环计算1到100的和
#!/usr/bin/env python3
n = 100
sum = 0
i = 1
while i <= n:
sum = sum + i
i = i + 1
print("1 到 %d 之和为: %d" % (n, sum))
结果:
1 到 100 之和为: 5050
例2.9 使用 while循环遍历列表\元组
下面的例子是遍历列表,元组的遍历也是一样的
#!usr/bin/python3
lists = ["haha", "hehe", "heihei", "xixi"]
i = 0
while i < len(lists):
print(lists[i])
i = i + 1
结果:
haha
hehe
heihei
xixi
例2.10 对整数列表进行分类,分别将除以3可以整除/余1/余2的数各放入一个列表
#!usr/bin/python3
src_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
a_list = []
b_list = []
c_list = []
i = 0
while i < len(src_list):
ele = src_list.pop()
if ele % 3 == 0:
a_list.append(ele)
elif ele % 3 == 1:
b_list.append(ele)
elif ele % 3 == 2:
c_list.append(ele)
i = i + 1
print("a_list = ", a_list)
print("b_list = ", b_list)
print("c_list = ", c_list)
结果:
a_list = [15, 12, 9]
b_list = [13, 10]
c_list = [14, 11, 8]
2.2.2 for循环
例2.11 使用for循环计算1到100的和
#!usr/bin/python3
sum = 0
for i in range(1,101):
sum = sum + i
print("sum = ", sum)
结果:
sum = 5050
例2.12 使用for循环遍历列表和元组
#!usr/bin/python3
lists = ["haha", "hehe", "heihei", "xixi"]
for element in lists:
print(element)
结果:
haha
hehe
heihei
xixi
例2.13 计算列表中所有数字元素的总和、平均值
#!usr/bin/python3
src_list = [12, 45, 3.4, 13, "a", 4, "b", 109.5, "haha", 234]
sum = 0
count = 0
for ele in src_list:
if isinstance(ele, int) or isinstance(ele, float):
sum = sum + ele
count = count + 1
print("sum = ", sum)
print("avg = ", sum / count)
结果:
sum = 420.9
avg = 60.128571428571426
例2.14 使用for循环遍历字典
遍历字典,可以使用dict 的items(), keys(), values()方法
#!usr/bin/python3
scores = {"math" : 80, "english" : 80, "chinese" : 90}
items = scores.items()
keys = scores.keys()
values = scores.values()
for key, value in items:
print(key + " : " + str(value))
print("=====================")
for key in keys:
value = scores[key]
print(key + " : " + str(value))
print("=====================")
for value in values:
print("value = ", value)
结果:
math : 80
english : 80
chinese : 90
=====================
math : 80
english : 80
chinese : 90
=====================
value = 80
value = 80
value = 90
2.3 循环控制
python语言没有提供goto语句来控制程序的跳转,提供了continue和break来控制循环结构
2.3.1 break 语句
某些时候,需要在某种条件出现时强行中止循环,而不是等到循环条件为False时才退出循环,与其他编程语言一样,break用于跳出循环,请看下面的例子:
例2.15
#!usr/bin/python3
for i in range(1,10):
if i == 5:
break
print("i = ", i) #5以后的不会打印
结果:
i = 1
i = 2
i = 3
i = 4
2.3.2 continue语句
与其他编程语言一样,continue语句用于跳出本次循环,执行下一次循环
例2.16
#!usr/bin/python3
for i in range(1,10):
if i == 5:
continue
print("i = ", i) #不会把5打印出来
结果:
i = 1
i = 2
i = 3
i = 4
i = 6
i = 7
i = 8
i = 9
2.2.3.3 pass
一般在函数中,或循环中使用,什么也不做,就是个占位符,在if条件语句中也有
#!usr/bin/python3
for i in range(1,10):
pass
2.4 嵌套循环
与其他编程语言一样,嵌套循环就是多层循环,内层循环是外层循环的循环体,只有内层循环的循环条件为假时,才会完全跳出内层循环
例2.17
#!usr/bin/python3
for i in range(1, 3):
j = 0
while j < 3:
print("i = %d, j = %d" % (i, j))
j = j + 1
结果:
i = 1, j = 0
i = 1, j = 1
i = 1, j = 2
i = 2, j = 0
i = 2, j = 1
i = 2, j = 2
2.5 推导式
推导式又叫做for表达式,主要是对列表、字典、元组等进行遍历同时生成新的列表、字典、元组,写起来简洁一些,往往用一行代码就搞定,而如果用其他语言可能需要五六行代码
2.5.1 列表推导式
例2.18 找出数组中字符串长度大于3的元素
names = ["haha","hehe","xixi","2","32","3323"]
new_names = [name for name in names if len(name)>3]
print(new_names)
结果:
['haha', 'hehe', 'xixi', '3323']
例2.19 找出30以内可以被3整除的数字
arr = [i for i in range(30) if i % 3 == 0]
print(arr)
结果:
[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
2.5.2 字典推导式
例2.20
lists = ["haha", "heihei", "hehe"]
dicts = {key:len(key) for key in lists}
print(dicts)
结果:
{'haha': 4, 'heihei': 6, 'hehe': 4}
例2.21
dicts = {x: x**2 for x in (3, 4, 5)}
print(dicts)
结果:
{3: 9, 4: 16, 5: 25}
2.5.3 集合推导式
例2.22
sets = {x ** 3 for x in (2,3,4)}
print(sets)
结果:
{8, 64, 27}
2.5.4 元组推导式
例2.23
a = (x for x in range(1,5))
print(tuple(a))
结果:
(1, 2, 3, 4)