网站图片设置链接,四平网站建设404页面对网站的好处及设置方法,商业计划的网站建设费用,专业的建设机械网站制作目录 1 选择结构1.1 单分支选择结构1.2 条件表达式详解1.3 条件表达式中#xff0c;不能有赋值操作符“”1.4 双分支选择结构1.5 三元条件运算符1.6 多分支选择结构1.7 选择结构嵌套 2 循环结构2.1 while循环2.2 for循环和可迭代对象遍历2.3 可迭代对象2.4 range对象2.5 嵌套循… 目录 1 选择结构1.1 单分支选择结构1.2 条件表达式详解1.3 条件表达式中不能有赋值操作符“”1.4 双分支选择结构1.5 三元条件运算符1.6 多分支选择结构1.7 选择结构嵌套 2 循环结构2.1 while循环2.2 for循环和可迭代对象遍历2.3 可迭代对象2.4 range对象2.5 嵌套循环和综合练习2.6 break语句2.7 continue语句2.8 else语句2.9 循环代码优化2.10 其他优化手段 3 使用zip()并行迭代4 推导式创建序列4.1 列表推导式4.2 字典推导式4.3 集合推导式4.4 生成器推导式生成元组4.5 综合练习 前面学习的变量、数据类型整数、浮点数、布尔、序列字符串、列表、元组、字典、集合可以看做是数据的组织方式。数据可以看做是“砖块” 流程控制语句是代码的组织方式可以看做是“混凝土”。 一个完整的程序离不开“砖块”也离不开“混凝土”。他们的组合才能让我们建立从小到“一个方法”大到“操作系统”这样各种各样的“软件”。 1 选择结构
选择结构通过判断条件是否成立来决定执行哪个分支。选择结构有多种形式分为单分支、双分支、多分支。流程图如下
单分支结构 双分支结构 多分支结构 1.1 单分支选择结构
if语句单分支结构的语法形式如下
if 条件表达式:
语句/语句块其中 ①条件表达式可以是逻辑表达式、关系表达式、算术表达式等等。 ②语句/语句块可以是一条语句也可以是多条语句。多条语句缩进必须对齐一致。
【操作】输入一个数字小于10则打印这个数字(if_test01.py)
num input(输入一个数字) # input()默认返回字符串
if int(num)10:print(num)1.2 条件表达式详解
在选择和循环结构中条件表达式的值为False的情况如下 False、0、0.0、空值None、空序列对象空列表、空元祖、空集合、空字典、空字符串、空range对象、空迭代对象。
其他情况均为True。这么看来Python所有的合法表达式都可以看做条件表达式甚至包括函数调用的表达式。
【操作】测试各种条件表达式
if 3: #整数作为条件表达式print(ok)
a [] #列表作为条件表达式由于为空列表是False
if a:print(空列表False)
s False #非空字符串是True
if s:print(非空字符串是True)c 9
if 3c20:print(3c20)
if 3c and c20:print(3c and c20)if True: #布尔值print(True)执行结果如下
ok
非空字符串是True
3c20
3c and c20
True1.3 条件表达式中不能有赋值操作符“”
在Python中条件表达式不能出现赋值操作符“”避免了其他语言中经常误将关系运算符“”写作赋值运算符“”带来的困扰。如下代码将会报语法错误
if 3c and (c20): print(赋值符不能出现在条件表达式中)1.4 双分支选择结构
双分支结构的语法格式如下
if 条件表达式 :
语句1/语句块1
else:
语句2/语句块2【操作】输入一个数字小于10则打印该数字大于10则打印“数字太大”
num input(输入一个数字)
if int(num)10:print(num)
else:print(数字太大)1.5 三元条件运算符
Python提供了三元运算符用来在某些简单双分支赋值情况。三元条件运算符语法格式如下
条件为真时的值 if (条件表达式) else 条件为假时的值上一个案例代码可以用三元条件运算符实现
num input(请输入一个数字)
print( num是小于10的数字 if int(num)10 else num是大于等于10的数字)可以看到这种写法更加简洁易读。
1.6 多分支选择结构
多分支选择结构的语法格式如下
if 条件表达式1 :
语句1/语句块1
elif 条件表达式2:
语句2/语句块2elif 条件表达式n :
语句n/语句块n
[else:
语句n1/语句块n1
]【注】计算机行业描述语法格式时使用中括号[]通常表示可选非必选。
多分支结构几个分支之间是有逻辑关系的不能随意颠倒顺序。 【操作】输入一个学生的成绩将其转化成简单描述不及格(小于60)、及格(60-79)、良好(80-89)、优秀(90-100)。 方法1使用完整的条件表达
score int(input(请输入分数))
grade
if(score60):grade 不及格
if(60score80):grade 及格
if(80score90):grade 良好
if(90score100):grade 优秀print(分数是{0},等级是{1}.format(score,grade))每个分支都使用了独立的、完整的判断没有依赖顺序可以随意挪动而不影响程序运行。
方法2利用多分支结构
score int(input(请输入分数))
grade
if score60 :grade 不及格
elif score80 :grade 及格
elif score90 :grade 良好
elif score100:grade 优秀print(分数是{0},等级是{1}.format(score,grade))【操作】已知点的坐标(x,y)判断其所在的象限
x int(input(请输入x坐标))
y int(input(请输入y坐标))x int(input(请输入x坐标))
y int(input(请输入y坐标))if(x0 and y0):print(原点)
elif (x 0):print(y轴)
elif (y 0):print(x轴)
elif (x0 and y0):print(第一象限)
elif (x0 and y0):print(第二象限)
elif (x0 and y0):print(第三象限)
else:print(第四象限)1.7 选择结构嵌套
选择结构可以嵌套使用时一定要注意控制好不同级别代码块的缩进量因为缩进量决定了代码的从属关系。语法格式如下
if 表达式1语句块1if 表达式2语句块2else:语句块3
else:if 表达式4语句块4【操作】输入一个分数。分数在0-100之间。90以上是A,80以上是B70以上是C60以上是D。60以下是E。
# 测试选择结构嵌套
score int(input(请输入一个在0-100之间的数字))
grade
if score100 or score0:score int(input(输入错误请重新输入一个在0-100之间的数字))
else:if score90:grade Aelif score80:grade Belif score70:grade Celif score60:grade Delse:grade Eprint(分数为{0},等级为{1}.format(score,grade))#或者也可以用下面代码更少的方法。不过需要大家思考为什么这么写了
score int(input(请输入一个在0-100之间的数字))
degree ABCDE
num 0
if score100 or score0:score int(input(输入错误请重新输入一个在0-100之间的数字))
else:num score//10if num6:num5if num10:num9print(分数是{0},等级是{1}.format(score,degree[9-num]))2 循环结构
循环结构用来重复执行一条或多条语句。表达这样的逻辑如果符合条件则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为True如果为True则重复执行循环体里的语句。图示如下
循环体里面的语句至少应该包含改变条件表达式的语句以使循环趋于结束否则就会变成一个死循环。
2.1 while循环
while循环的语法格式如下
while 条件表达式
循环体语句我们通过一些简单的练习来慢慢熟悉while循环。
【操作】利用while循环打印从0-10的数字。
num 0
while num10:print(num, end\t)num 1【操作】利用while循环计算1-100之间数字的累加和计算1-100之间偶数的累加和计算1-100之间奇数的累加和。
num 0
sum_all 0 #1-100所有数的累加和
sum_even 0 #1-100偶数的累加和
sum_odd 0 #1-100奇数的累加和
while num100:sum_all numif num%20:sum_even numelse:sum_odd numnum 1 #迭代改变条件表达式使循环趋于结束print(1-100所有数的累加和,sum_all)
print(1-100偶数的累加和,sum_even)
print(1-100奇数的累加和,sum_odd)2.2 for循环和可迭代对象遍历
for循环通常用于可迭代对象的遍历。for循环的语法格式如下
for 变量 in 可迭代对象
循环体语句【操作】遍历一个元组或列表
for x in (20,30,40):print(x*3)for x in [20,30,40]:print(x*3)2.3 可迭代对象
Python包含以下几种可迭代对象
序列。包含字符串、列表、元组字典迭代器对象iterator生成器函数generator文件对象
我们已经在前面学习了序列、字典等知识迭代器对象和生成器函数将在后面进行详解。接下来我们通过循环来遍历这几种类型的数据
【操作】遍历字符串中的字符
for x in sxt001:print(x)【操作】遍历字典
d {name:gaoqi,age:18,address:西三旗001号楼}
for x in d: #遍历字典所有的keyprint(x)for x in d.keys():#遍历字典所有的keyprint(x)for x in d.values():#遍历字典所有的valueprint(x)for x in d.items():#遍历字典所有的键值对print(x)for y in range(2):print(x[y])print(type(x))2.4 range对象
range对象是一个迭代器对象用来产生指定范围的数字序列。格式为
range(start, end [,step])生成的数值序列从start开始到end结束不包含end。若没有填写start则默认从0开始。step是可选的步长默认为1。如下是几种典型示例
for i in range(10) 产生序列0 1 2 3 4 5 6 7 8 9
for i in range(3,10) 产生序列3 4 5 6 7 8 9
for i in range(3,10,2) 产生序列3 5 7 9 【操作】利用for循环计算1-100之间数字的累加和计算1-100之间偶数的累加和计算1-100之间奇数的累加和。
sum_all 0 #1-100所有数的累加和
sum_even 0 #1-100偶数的累加和
sum_odd 0 #1-100奇数的累加和
for num in range(101):sum_all numif num%20:sum_even numelse:sum_odd numprint(1-100累加总和{0},奇数和{1},偶数和{2}.format(sum_all,sum_odd,sum_even))2.5 嵌套循环和综合练习
一个循环体内可以嵌入另一个循环一般称为“嵌套循环”或者“多重循环”。
【操作】打印如下图案
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4for x in range(5):for y in range(5):print(x,end\t)print() #仅用于换行【操作】利用嵌套循环打印九九乘法表
for m in range(1,10):for n in range(1,m1):print({0}*{1}{2}.format(m,n,(m*n)),end\t)print()执行结果
1*11
2*12 2*24
3*13 3*26 3*39
4*14 4*28 4*312 4*416
5*15 5*210 5*315 5*420 5*525
6*16 6*212 6*318 6*424 6*530 6*636
7*17 7*214 7*321 7*428 7*535 7*642 7*749
8*18 8*216 8*324 8*432 8*540 8*648 8*756 8*864
9*19 9*218 9*327 9*436 9*545 9*654 9*763 9*872 9*981【操作】用列表和字典存储下表信息并打印出表中工资高于15000的数据
姓名年龄薪资城市高小一1830000北京高小二1920000上海高小五2010000深圳
r1 dict(name高小一,age18,salary30000,city北京)
r2 dict(name高小二,age19,salary20000,city上海)
r3 dict(name高小三,age20,salary10000,city深圳)
tb [r1,r2,r3]for x in tb:if x.get(salary)15000:print(x)2.6 break语句
break语句可用于while和for循环用来结束整个循环。当有嵌套循环时break语句只能跳出最近一层的循环。
【操作】使用break语句结束循环
while True:a input(请输入一个字符输入Q或q结束)if a.upper()Q:print(循环结束退出)breakelse:print(a)2.7 continue语句
continue语句用于结束本次循环继续下一次。多个循环嵌套时continue也是应用于最近的一层循环。
【操作】要求输入员工的薪资若薪资小于0则重新输入。最后打印出录入员工的数量和薪资明细以及平均薪资
empNum 0
salarySum 0
salarys []
while True:s input(请输入员工的薪资按Q或q结束)if s.upper()Q:print(录入完成退出)breakif float(s)0:continue # 结束本次循环下面的代码不执行empNum 1salarys.append(float(s))salarySum float(s)print(员工数{0}.format(empNum))
print(录入薪资,salarys)
print(平均薪资{0}.format(salarySum/empNum))执行结果
请输入员工的薪资按Q或q结束2000
请输入员工的薪资按Q或q结束3000
请输入员工的薪资按Q或q结束4000
请输入员工的薪资按Q或q结束5000
请输入员工的薪资按Q或q结束Q
录入完成退出
员工数4
录入薪资 [2000.0, 3000.0, 4000.0, 5000.0]
平均薪资3500.02.8 else语句
while、for循环可以附带一个else语句可选。如果for、while语句没有被break语句结束则会执行else子句否则不执行。语法格式如下
while 条件表达式
循环体
else:
语句块或者
for 变量 in 可迭代对象
循环体
else:
语句块【操作】员工一共4人。录入这4位员工的薪资。全部录入后打印提示“您已经全部录入4名员工的薪资”。最后打印输出录入的薪资和平均薪资
salarySum 0
salarys []
for i in range(4):s input(请输入一共4名员工的薪资按Q或q中途结束)if s.upper()Q:print(录入完成退出)breakif float(s)0:continuesalarys.append(float(s))salarySum float(s)else:print(您已经全部录入4名员工的薪资) print(录入薪资,salarys)
print(平均薪资{0}.format(salarySum/4))2.9 循环代码优化
虽然计算机越来越快空间也越来越大我们仍然要在性能问题上“斤斤计较”。编写循环时遵守下面三个原则可以大大提高运行效率避免不必要的低效计算
尽量减少循环内部不必要的计算嵌套循环中尽量减少内层循环的计算尽可能向外提。局部变量查询较快尽量使用局部变量
#循环代码优化测试
import timestart time.time()
for i in range(1000):result []for m in range(10000):result.append(i*1000m*100)end time.time()
print(耗时{0}.format((end-start)))start2 time.time()
for i in range(1000):result []c i*1000for m in range(10000):result.append(cm*100) # 少计算10000000-1000次end2 time.time()
print(耗时{0}.format((end2-start2)))运行结果
耗时1.4978797435760498
耗时1.29988074302673342.10 其他优化手段
连接多个字符串使用join()而不使用列表进行元素插入和删除尽量在列表尾部操作
3 使用zip()并行迭代
我们可以通过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))for i in range(3):print({0}--{1}--{2}.format(names[i], ages[i], jobs[i]))执行结果
高淇--18--老师
高老二--16--程序员
高老三--20--公务员高淇--18--老师
高老二--16--程序员
高老三--20--公务员4 推导式创建序列
推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合从而避免冗长的代码。推导式是典型的Python风格会使用它代表你已经超过Python初学者的水平。
4.1 列表推导式
列表推导式生成列表对象语法如下
[表达式 for item in 可迭代对象 ]
或者{表达式 for item in 可迭代对象 if 条件判断}[x for x in range(1,5)]
[1, 2, 3, 4][x*2 for x in range(1,5)]
[2, 4, 6, 8][x*2 for x in range(1,20) if x%50 ]
[10, 20, 30][a for a in abcdefg]
[a, b, c, d, e, f, g]cells [(row,col) for row in range(1,10) for col in range(1,10)] #可以使用两个循环for cell in cells:print(cell)4.2 字典推导式
字典的推导式生成字典对象格式如下
{key_expression : value_expression for 表达式 in 可迭代对象}类似于列表推导式字典推导也可以增加if条件判断、多个for循环。
统计文本中字符出现的次数 my_text i love you, i love sxt, i love gaoqichar_count {c:my_text.count(c) for c in my_text}char_count
{ : 9, i: 4, l: 3, o: 5, v: 3, e: 3, y: 1, u: 1, ,: 2, s: 1, x: 1, t: 1, g: 1, a: 1, q: 1}# 课下作业使用普通循环实现字典推导式文件中
char_count {}
my_text i love you, i love sxt, i love gaoqi
for c in my_text:char_count[c] my_text.count(c)
print(char_count)4.3 集合推导式
集合推导式生成集合和列表推导式的语法格式类似
{表达式 for item in 可迭代对象 }
或者{表达式 for item in 可迭代对象 if 条件判断}{x for x in range(1,100) if x%90}
{99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}4.4 生成器推导式生成元组
很多同学可能会问“都有推导式元组有没有”能不能用小括号呢小括号对应的是元组
(x for x in range(1,100) if x%90)
generator object genexpr at 0x00000180E0F3C9E0我们发现提示的是“一个生成器对象”。显然元组是没有推导式的。
一个生成器只能运行一次。第一次迭代可以得到数据第二次迭代发现数据已经没有了。 gnt (x for x in range(1,100) if x%90)for x in gnt: # gnt是一个生成器生成器是一个可迭代对象只能使用一次print(x,end )
9 18 27 36 45 54 63 72 81 90 99 for x in gnt:print(x,end )4.5 综合练习
绘制多个同心圆
import turtlet turtle.Pen()my_colors (red, green, yellow, black)t.width(4)
t.speed(0)for i in range(10): # 0 1 2 3 4t.penup()t.goto(0, -i*10) # 0 -100 -200 -300 -400t.pendown()t.color(my_colors[i%len(my_colors)])t.circle(15i*10) # 100 200 300 400 500turtle.done() # 程序执行完窗口仍在运行效果
绘制18*18棋盘
#画棋盘
import turtlewidth 30
num 18x1 [(-400,400),(-400width*num,400)]
y1 [(-400,400),(-400,400-width*num)]
t turtle.Pen()
t.speed(10)
# t.goto(x1[0][0],x1[0][1])
# t.goto(x1[1][0],x1[1][1])for i in range(0,19):t.penup()t.goto(x1[0][0],x1[0][1]-30*i)t.pendown()t.goto(x1[1][0],x1[1][1]-30*i)for i in range(0,19):t.penup()t.goto(y1[0][0]30*i,y1[0][1])t.pendown()t.goto(y1[1][0]30*i,y1[1][1])t.hideturtle() #隐藏画笔
turtle.done() #保证运行窗口不被自动关闭# 画棋盘(自己做的)
import turtlewidth 30
num 19turtle.speed(0)for i in range(num):turtle.penup()turtle.goto(0, i * 20)turtle.pendown()turtle.goto(360, i*20)for j in range(num):turtle.penup()turtle.goto(j * 20, 0)turtle.pendown()turtle.goto(j * 20, 360)turtle.hideturtle() # 隐藏画笔
turtle.done()运行结果