一、 顺序结构
代码从上到下一行行执行,没有任何判断和跳转
二、if分支结构
- python中流程控制须格外注意缩进,否则可能遇到各种奇奇怪怪的错误
- else if的写法是elif
- 注意if,else,elif后面加冒号:
- False、0、各种表示空的值(None,"",'',(),[],{}),在if判断时都为假;但注意" ",' '(一个空格)为真
- pass语句相当于一个占位符,表示不做任何事
if语句分支形式
a=input("Input a value:")
if int(a) > 20:
print("value > 20")
a=input("Input a value:")
if int(a) > 20:
print("value > 20")
else:
print("value <= 20")
a=input("Input a value:")
val=int(a)
if val > 20:
print("value > 20")
elif val < 20:
print("value < 20")
else:
print("value = 20")
三、 断言
与if类似,若判断为True则继续执行,若判断为false则报错AssertionError
- 注意断言后面不需要冒号:
- 断言后面执行的语句也不需要缩进
a=input("Input a value:")
val=int(a)
assert val > 20
print("value > 20")
#输出
Input a value:30
value > 20
Input a value:10
Traceback (most recent call last):
File "E:/pytest02/var.py", line 9, in <module>
assert val > 20
AssertionError
四、 循环结构
- 同样同样,注意缩进
- 注意循环判断语句后面也有个冒号:
1. while循环
i=0
while i<5: #注意冒号:
print(i)
i+=1
使用while循环遍历元组/列表
a_tuple=(3,6,432,876,132)
i=0
while i<len(a_tuple):
print(a_tuple[i]+1)
i+=1
2. for-in循环
for-in循环专门用于遍历字符串、范围、列表、元组、字典等可迭代对象
for 变量 in 字符串|范围|列表|元组|字典:
statements
小例子:
#阶乘计算
mx=5
result=1
for i in range(1,mx+1):
result *= i
print(result)
#遍历元组
a_tuple=(2,4,5,7)
for i in a_tuple:
print(i)
#另一种方法
for ind in range(0,len(a_tuple)):
print(a_tuple[ind])
#遍历字典,可以分别用items(),keys,values()三种方法
a_dict={'a':2,'b':4,'c':5}
for key,value in a_dict.items():
print("keys: ",key)
print("values: ", value)
for key in a_dict.keys():
print("keys: ",key)
print("values: ", a_dict[key])
for value in a_dict.values():
#这样没法取key值
print("values: ",value)
for-in循环中变量的值只由in后面可迭代对象的值控制,在程序中对其赋值不影响循环次数(也不建议这样做)
for i in range(1,5):
i=20 #不会影响循环次数
print(i)
#输出
20
20
20
20
3. for表达式
语法格式
[表达式 for 变量 in 可迭代对象]
或者
(表达式 for 变量 in 可迭代对象)
与普通for循环的区别:
- 在for关键词前定义一个表达式,该表达式中通常会包含计数器
- for表达式没有循环体,因此不需要冒号:
- 使用[]的for表达式最终返回的是列表,也被称为列表推导式
- 使用()的for表达式最终返回的是生成器,也被称为生成器推导式
a_range=range(5)
a_list=[x*x for x in a_range]
print(a_list)
#输出
[0, 1, 4, 9, 16]
可以在for表达式后添加if条件,此时只有符合条件的元素才会执行表达式
a_range=range(5)
a_list=[x*x for x in a_range if x%2 == 0]
print(a_list)
#输出
[0, 4, 16]
下面是使用()的for表达式返回生成器的例子
a_range=range(5)
c_generator=(x*x for x in a_range if x%2 == 0)
for i in c_generator: #要多一个循环来输出
print(i,end='\t')
#输出
0 4 16
for表达式可以使用多个循环,效果同嵌套循环(较难理解,少用)
d_list=[(x,y) for x in range(5) for y in range(4)]
print(d_list)
#相当于
d_list2=[]
for x in range(5):
for y in range(4):
d_list2.append((x,y))
print(d_list2)
#输出
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]
4. 常用函数
zip()函数——将两个列表“压缩”成一个zip对象(可迭代对象)。这样就可以使用一个循环遍历两个列表
a=['a','b','c']
c=[0.1,0.2]
my_list=[x for x in zip(a,c)]
print(my_list)
#输出
[('a', 0.1), ('b', 0.2)]
reversed()函数——反向可迭代对象
a=[2,5,7,4,8,4,7]
my_list=[x for x in reversed(a)]
print(my_list)
#输出
[7, 4, 8, 4, 7, 5, 2]
5. 控制循环结构
break——在符合条件时立即结束本次循环
a=[2,5,7,4,8,4,7]
for i in a:
if i%2 == 0:
print(i)
break
#输出
2
continue——在符合条件时忽略本次循环剩下的语句
a=[2,5,7,4]
for i in a:
print(i)
if i%2 == 0:
continue
print("输出continue后语句")
#输出
2
5
输出continue后语句
7
输出continue后语句
4
return——用于从包围它的最直接的方法、函数或匿名函数返回。一旦在循环体内执行到return时,return语句就会结束该函数或方法
def test():
# 外层循环
for i in range(5):
for j in range(5):
print("i的值为:%d,j的值为:%d" % (i,j))
if j == 1:
return
print("return后输出语句")
#调用函数
test()
#输出
i的值为:0,j的值为:0
return后输出语句
i的值为:0,j的值为:1