控制语句
分为顺序、选择和循环三类
选择结构
单分支选择结构
if "False": # 条件表达式
print("YES!") # 语句块
'''
易错点:是否会打印“YES!”呢?
1. 只有0、0.0、False、""、None、空range对象、空迭代对象和空序列为False,其余均为True
2. 条件表达式不能出现赋值运算符"=",否则会报错
'''双分支选择结构
# 1.标准双分支结构
if "0": # 条件表达式
print("条件为真的语句块")
else:
print("条件为假的语句块")
# 2.三元条件运算符
"条件为真的语句" if "条件表达式" else "条件为假的语句"多分支选择结构
if "条件表达式1":
print("语句块1")
elif "条件表达式2":
print("语句块2")
...
elif "条件表达式n":
print("语句块n")
[else:
print("语句块n+1")
]
'''
1. 中括号在计算机语言中表示可选
2. 一旦某语句块的条件表达式为真,后续条件表达式均不执行,和and的短路一样
'''循环结构
while和for语句
while循环(在控制台中按Ctrl+C结束死循环)''' 打印0-10的循环示例 ''' i = 0 while i<=10: # 条件表达式 print(i) # 语句块 i += 1 # 迭代语句,作用为更新条件表达式,死循环非必选for循环''' 可迭代对象(iterable)的分类: 1. 序列(字符串、列表、元组、字典、集合) 2. 迭代器对象(iterator) 3. 生成器函数(generaor) 4. 文件对象 ''' for variable in iterable: print("Block")嵌套循环问题使用逐层分析法解决
break和continue语句
break语句用于结束整个循环;对于嵌套循环,只能结束最近的循环continue语句用于结束本次循环;对于嵌套循环,只能结束最近的循环
else语句
# 在for循环中
for i in range(101):
pass
else:
pass
# 在while循环中
i = 1
while i <= 10:
i += 1
else:
pass
'''
只有完整执行循环时(即没有循环被break语句结束),相应循环(如有嵌套)的else语句内容才被执行。
'''循环的优化
- 尽量减少在内层循环的计算
- 尽量减少嵌套循环
- 尽可能使用
局部变量
- 连接字符串尽可能使用
join()而非+- 增删改
list,尽可能对尾部元素操作
控制语句应用专题拓展
zip函数实现并行迭代
'''
zip()微专题在“字典的创建”已经讲解,忘记请回顾,本例仅从循环迭代的角度进行应用
'''
a = [1,2,3]
b = ['a','b','c','d']
c = [100,200,300,400,500,600]
# zip()实现并行迭代
for i,j,k in zip(a,b,c):
print(i,j,k)
# 并行迭代替换
for i in range(min(len(a),len(b),len(c))):
print(a[i],b[i],c[i])推导式创建序列
- 本专题拓展为“元组的创建”部分
生成器推导式生成list或tuple微专题的延申- 基本结构均为:
表达式 for 单个对象 in 可迭代对象
列表推导式
list1 = [x for x in range(5)] list2 = [x*2 for x in range(101) if x%2==0] # 改写list2为list3 list3 = [] for x in range(101): if x%2 == 0: list3.append(i*2) list4 = [(i,j) for i,j in zip([1,2,3,4],['a','b','c'])] # 改写list4为list5 list5 = [] for i,j in zip([1,2,3,4],['a','b','c']): list5.append((i,j))字典推导式
key = range(4) value = ['a','b','c','d'] dict1 = {k*10:''.join(v) for k,v in zip(key,value)} # 改写dict1为dict2 dict2 = {} for k,v in zip(key,value): dict2[k] = v # 进阶应用:统计字符串中单个字符出现的次数 str_ex = 'DQSIkWdsW0yxEjajBLZtrQAAAAAAAAAAAAMAACmonUJUNk5QVDhBSko2TzZGU05YVjVWTTRISFRUSy4u' dict_count = {char:str_ex.count(char) for char in str_ex}集合推导式
set_ex = {x**3 for x in range(10) if x%2!=0}- 元组推导式:不存在,为什么呢?忘记了请回归相关微专题