break & continue
break 语句
break 语句可用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只 能跳出最近一层的循环。
continue 语句
continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最 近的一层循环。
else 语句:
while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句 结束,则会执行 else 子句,否则不执行。
empNum = 0
salarySum= 0
salarys = []
while True:
s = input("请输入员工的薪资(按 Q 或 q 结束)")
if s.upper()=='Q':
print("录入完成,退出")
break
if float(s)<0:
continue
empNum +=1
salarys.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 结束)5000
请输入员工的薪资(按 Q 或 q 结束)10000
请输入员工的薪资(按 Q 或 q 结束)q
录入完成,退出
员工数4
录入薪资: [2000.0, 3000.0, 5000.0, 10000.0]
平均薪资5000.0
'''
empNum = 0
salarySum= 0
salarys = []
for i in range (4):
s = input("请输入员工的薪资(按 Q 或 q 结束)")
if s.upper()=='Q':
print("录入完成,退出")
break
if float(s)<0:
continue
empNum +=1
salarys.append(float(s))
salarySum += float(s)
else:
print("Finish input")
print("员工数{0}".format(empNum))
print("录入薪资:",salarys)
print("平均薪资{0}".format(salarySum/empNum))
'''
请输入员工的薪资(按 Q 或 q 结束)1000
请输入员工的薪资(按 Q 或 q 结束)20000
请输入员工的薪资(按 Q 或 q 结束)3000
请输入员工的薪资(按 Q 或 q 结束)4000
Finish input
员工数4
录入薪资: [1000.0, 20000.0, 3000.0, 4000.0]
平均薪资7000.0
'''
循环代码优化
- 尽量减少循环内部不必要的计算
- 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
- 局部变量查询较快,尽量使用局部变量
其他优化手段
- 连接多个字符串,使用 join()而不使用+
- 列表进行元素插入和删除,尽量在列表尾部操作
推导式创建序列
推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合, 从而避免冗长的代码。推导式是典型的 Python 风格,会使用它代表你已经超过 Python 初 学者的水平。
列表推导式
列表推导式生成列表对象,语法如下:
[表达式 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, 20) if x % 5 == 0] #[10, 20, 30]
cells = [(row, col) for row in range(1, 5) for col in range(1, 5)]
for cell in cells:
print (cell)
'''
(1, 1)
(1, 2)
(1, 3)
(1, 4)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 1)
(3, 2)
(3, 3)
(3, 4)
(4, 1)
(4, 2)
(4, 3)
(4, 4)
'''
字典推导式
字典的推导式生成字典对象,格式如下:
{key_expression : value_expression for 表达式 in 可迭代对象}
类似于列表推导式,字典推导也可以增加 if 条件判断、多个 for 循环。
my_text = ' i love Shanghai'
count_char = {c:my_text.count(c) for c in my_text}
print(count_char)
#{' ': 3, 'i': 2, 'l': 1, 'o': 1, 'v': 1, 'e': 1, 'S': 1, 'h': 2, 'a': 2, 'n': 1, 'g': 1}
集合推导式
集合推导式生成集合,和列表推导式的语法格式类似:
{表达式 for item in 可迭代对象 }
或者:{表达式 for item in 可迭代对象 if 条件判断}
{x for x in range(1,100) if x%9==0} #{99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}
生成器推导式(生成元组)
一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代发现数据已经没有了。
print((x for x in range(1,100) if x%9==0)) #print((x for x in range(1,100) if x%9==0))
操作
绘制多个同心圆
import turtle
t = turtle.Pen()
my_color = ['blue','black','red','yellow','green']
for i in range (0,5):
t.color(my_color[i])
t.penup()
t.goto(0, -100*i)
t.pendown()
t.circle(100+i*100)
turtle.down()
绘制 18*18 棋盘
import turtle
t = turtle.Pen()
width = 20
num = 18
x1 = [(-400,400),(-400+width*num,400)]
y1 = [(-400,400),(-400,400-width*num)]
t.speed(10)
for i in range(0,19):
t.penup()
t.goto(x1[0][0],x1[0][1]-i*20)
t.pendown()
t.goto(x1[1][0], x1[1][1] - i * 20)
for j in range(0,19):
t.penup()
t.goto(y1[0][0] + j * 20, y1[0][1] )
t.pendown()
t.goto(y1[1][0]+ j * 20, y1[1][1] )
turtle.done()