选择结构
选择结构有多种形式,分为:单分支、双分支、多分支。
单分支结构
语法格式
if 条件表达式:
语句/语句块
条件表达式的值为 False 的情况如下:
- False(区别字符串“False”是非空字符串)
- 0,0.0
- 空值 None、空序列对象(空列表、空元祖、空集合、空字典、空字符串)、空 range 对象、空迭代对象
其他情况,均为 True
条件表达式中,不能有赋值操作符“=”
双分支结构
语法格式
if 条件表达式 :
else:
语句 2/语句块 2
三元条件运算符
双分支结果在较简单时,可以用三元条件运算符代替
格式如下:
条件为真时的值 if (条件表达式) else 条件为假时的值
a=50
a if a<100 else "too much"
#50
多分支结构
语法格式
if 条件表达式 1 :
elif 条件表达式 2:
……
elif 条件表达式 n :
[else:
方括号中的句子表示可选(不选也可)。多分支结构,几个分支之间是有逻辑关系的,不能随意颠倒顺序。
选择结构的嵌套
选择结构可以嵌套, 使用时一定要注意控制好不同级别代码块的缩进量, 因为缩进量决定了代码的从属关系。
语法形式
if 表达式 1:
else:
语句块 4
python实例
给分数评级的两种写法
score = int(input(" 请输入一个在0-100之间的数字 :"))
grade = ""
if score>100 or score<0:
score = int(input("输入错误!请重新输入一个在0-100之间的数字 :"))
else:
if score>=90:
grade = "A"
elif score>=80:
grade = 'B'
elif score>=70:
grade = 'C'
elif score>=60:
grade = 'D'
else:
grade = 'E'
print(" 分数为{0}, 等级为{1}".format(score,grade))
score = int(input(" 请输入一个在0-100之间的数字 :"))
degree = "ABCDE"
num = 0
if score>100 or score<0:
score = int(input("输入错误!请重新输入一个在0-100之间的数字 :"))
else:
num = score//10
if num<6:num=5
print(" 分数 是{0}, 等级是{1}".format(score,degree[9-num]))
循环结构
循环结构用来重复执行一条或多条语句。
循环体里面的语句至少应该包含改变条件表达式的语句,以使循环趋于结束;否则,就会变成一个死循环。
while 循环
语法格式
while 条件表达式:
循环体语句
for循环
语法格式
for 变量 in 可迭代对象:
循环体语句
可迭代对象
- 序列 (包含:字符串、列表、元组)
- 字典(详情看https://blog.csdn.net/little_yueyue/article/details/108174316 中的字典序列解包)
- 迭代器对象(iterator,包头不包尾)
- 生成器函数(generator)
- 文件对象
嵌套循环
一个循环体内可以嵌入另一个循环,一般称为“嵌套循环”,或者“多重循环”。
#九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print('{}*{}={}'.format(j,i,i*j),end='/t')#'/t'打印制表符
print()#仅用于换行
break 语句和continue语句
break 语句可用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只能跳出最近一层的循环。
continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最近的一层循环。
总结如下表:
语句 | 相同点 | 不同点 |
---|---|---|
break语句 | 只能跳出最近一层的循环 | 结束整个循环 |
continue语句 | 结束本次循环,继续下一次 |
循环语句中的else
while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句结束(正常结束),则会执行 else 子句,若被break语句中断,不执行else。
语法结构
while 条件表达式:
else:
或者:
for 变量 in 可迭代对象:
else:
语句块
循环代码优化
三个原则
遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:
- 尽量减少循环内部不必要的计算
- 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
- 局部变量查询较快,尽量使用局部变量
#循环代码优化测试
import time
start = time.time()
for i in range(1000):
result = []
for m in range(10000):
result.append(i*1000+m*100)
end = time.time()
print(" 耗 时 :{0}".format((end-start)))
#耗 时 :2.289644718170166
start2 = time.time()
for i in range(1000):
result = []
c = i*1000
for m in range(10000):
result.append(c+m*100)#i*1000+m*100中的i*1000提了出来
end2 = time.time()
print(" 耗 时 :{0}".format((end2-start2)))
#耗 时 :1.9445734024047852
其他优化手段
- 连接多个字符串,使用 join()而不使用+
- 列表进行元素插入和删除,尽量在列表尾部操作
使用 zip()并行迭代
通过 zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止。
names = ("高老一","高老二","高老三","高老四")
ages = (18,16,20,25)
jobs = ("老师","程序员","公务员")
for name,age,job in zip(names,ages,jobs):
print("{0}--{1}--{2}".format(name,age,job))
#高淇--18--老师
#高老二--16--程序员
#高老三--20--公务员
#当然,用下面这种方法也可
for i in range(min(len(names),len(ages),len(jobs))):
print("{0}--{1}--{2}".format(names[i],ages[i],job[i]))
拜师教育学员文章:作者:1187-吴同学,
转载或复制请以 超链接形式 并注明出处 拜师资源博客。
原文地址:《Day5 控制语句值》 发布于2020-08-24
评论 抢沙发