Python——控制语句 ( 下 ) [ 笔记 ]

本文深入探讨Python中的控制语句,包括break、continue、else的使用技巧,以及循环代码优化策略,如减少循环计算、使用局部变量、并行迭代和推导式创建序列,提升代码效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


060. break语句

  break语句可用于while和for循环,用来结束整个循环。当有嵌套循环时,break语句只能跳出最近一层的循环。

# break语句
while True:
    a = input("请输入一个字符(输入Q或q时退出):")
    if a.upper()=='Q':   # 相当于 a=='q' or a=='Q'
        print("循环结束,退出")
        break
    else:
        print(a)

运行结果:
pic4-1


061. continue语句

  continue语句用于结束本次循环,继续下一次。多个循环嵌套时,continue也是应用于最近的一层循环。

# continue语句
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))

运行结果:
pic4-2


062. else语句

  while、for循环可以附带一个else语句(可选)。如果for、while语句没有被break语句结束,则会执行else子句,否则不执行。语法格式如下:
while   条件表达式:
  循环体
else:
  语句块

或者:
for   变量   in   可迭代对象:
  循环体
else:
  语句块

# else语句
salarySum = 0   # 薪资总数
salarys = []   # 薪资列表

for x in range(3):
    s = input("请输入员工的薪资(按q或Q结束):")
    if s.upper()=='Q':
        print("录入完成,退出")
        break
    if float(s)<0:
        continue   # 不录入本次记录,继续下一个循环
    salarys.append(float(s))
    salarySum += float(s)

else:
    print("您已全部录入3名员工的薪资")   # for循环执行完整

print("录入薪资:",salarys)
print("平均薪资:{0}".format(salarySum/3))

运行结果:
pic4-3


063. 循环代码优化

  1. 尽量减少循环内部不必要的计算。
  2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
  3. 局部变量查询较快,尽量使用局部变量。
# 循环代码优化
import time

start1 = time.time()
for i in range(1000):
    result = []
    for m in range(10000):
        result.append(i*1000+m*100)
end1 = time.time()
print("耗时:{0}".format((end1-start1)))

start2 = time.time()
for i in range(1000):
    result = []
    c = i*1000   # 将内层循环提取出来
    for m in range(10000):
        result.append(c+m*100)
end2 = time.time()
print("耗时:{0}".format((end2-start2)))

运行结果:
pic4-4

其他优化手段

  1. 连接多个字符串,使用join()而不使用+
  2. 列表进行元素插入和删除,尽量在列表尾部操作

064. 使用zip()并行迭代

  我们可以通过zip函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止。

# 使用zip()并行迭代
names = ("张三","李四","赵五","刘六")
ages = (18,19,20,21)
places = ("北京","上海","广州")

# 方法一
for name,age,place in zip(names,ages,places):
    print("{0}--{1}--{2}".format(name,age,place))

# 方法二
for i in range(3):
    print("{0}--{1}--{2}".format(names[i],ages[i],places[i]))

运行结果:
pic4-5


065. 推导式创建序列

  推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合,从而避免冗长的代码。推导式是典型的Python风格。

  1. 极大简化代码
  2. 效率极高

列表推导式

  列表推导式生成列表对象,语法如下:

[表达式   for   item   in   可迭代对象]

或者:

{表达式   for   item   in   可迭代对象   if   条件判断}

# 列表推导式
y = [x*2 for x in range (1,50) if x%5==0]
print(y)

# 循环语句(同上效果一样,但是代码量多了)
y = []
for x in range(1,50):
    if x%5==0:
        y.append(x*2)
print(y)

# 使用两个循环
cells = [(row,col) for row in range(1,5) for col in range(1,5)]
print(cells)

运行结果:
pic4-6

字典推导式

  字典的推导式生成字典对象,格式如下:

{key_expression   :   value_expression   for   表达式   in   可迭代对象}

  类似于列表推导式,字典推导也可以增加if条件判断、多个for循环。
# 字典推导式
my_text = "i love python"
char_count = {c:my_text.count(c) for c in my_text}   # 统计my_text每个字的出现次数
print(char_count)

运行结果:
pic4-7

集合推导式

  集合推导式生成集合,和列表推导式的语句格式类似:

{表达式   for   item   in   可迭代对象}

或者:

{表达式   for   item   in   可迭代对象   if   条件判断}

# 集合推导式
b = {x for x in range(1,100) if x%9==0}
print(b)

运行结果:
pic4-8

生成器推导式(生成元组)

  元组是没有推导式的。
  一个生成器只能运行一次。第一次迭代可以得到数据,第二次迭代数据已经没有了。
  生成器是可迭代的对象,可循环。

# 生成器推导式
gnt = (x for x in range(1,100) if x%9==0)
print(gnt)   # 此时的gnt只是一个生成器
print(tuple(gnt))   # 使用生成器迭代数据
print(tuple(gnt))   # 第二次迭代

# 使用for循环语句
gnt = (x for x in range(1,100) if x%9==0)
for x in gnt:
    print(x,end=",")   # 第一次迭代数据
print(tuple(gnt))   # 第二次迭代数据

运行结果:
pic4-9


066. 综合练习

画同心圆

初级方式画同心圆:

import turtle
# 画同心圆
t = turtle.Pen()   # 获取画笔
t.goto(0,0)   # 画笔移动到(0,0)
t.circle(10)   # 半径为100的圆
t.goto(0,-10)   # 画笔移动到(0,-100)
t.circle(20)   # 半径为200的圆
t.goto(0,-20)   # 画笔移动到(0,-200)
t.circle(30)   # 半径为300的圆
turtle.done()   # 程序执行完,窗口依然在

循环结构画同心圆:

import turtle
# 使用循环结构画同心圆
t = turtle.Pen()   # 获取画笔
my_color = ('red','yellow','green','blue')   # 设置颜色
t.width(4)   # 设置线的宽度
t.speed(0)   # 设置速度,1最慢,数值越大越快(0也很快)
for i in range(10):
    t.penup()   # 抬笔
    t.goto(0,-i*10)
    t.pendown()   # 下笔
    t.color(my_color[i%len(my_color)])
    t.circle(i*10)
turtle.done()   # 程序执行完,窗口依然在

画棋盘

# 画18*18的棋盘
import turtle

width = 30
num = 18

x = [(-300,300),(-300+width*num,300)]
y = [(-300,300),(-300,300-width*num)]
t = turtle.Pen()   # 获取画笔
t.speed(10)   # 改变速度

for i in range(0,19):   # 画横线
    t.penup()
    t.goto(x[0][0],x[0][1]-30*i)
    t.pendown()
    t.goto(x[1][0],x[1][1]-30*i)

for i in range(0,19):   # 画竖线
    t.penup()
    t.goto(y[0][0]+30*i,y[0][1])
    t.pendown()
    t.goto(y[1][0]+30*i,y[1][1])

t.hideturtle()   #隐藏画笔
turtle.done()   #保证运行窗口不被自动关闭
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值