循环
循环结构
循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为 True,如果为 True 则重复执行循环体里的语句。图示如下:

while循环

num = 0
while num<=10:
print(num)
num += 1
num = 0
sum_all = 0
sum_even = 0
sum_odd = 0
while num < 100:
sum_all += num
if num%2 == 0:
sum_even += num
else:
sum_odd += num
num += 1
print("1-100 所有数的累加和",sum_all)
print("1-100 偶数的累加和",sum_even)
print("1-100 奇数的累加和",sum_odd)
for 循环和可迭代对象遍历
for 循环通常用于可迭代对象的遍历
for i in range(10):
print(i)
可迭代对象
Python 包含以下几种可迭代对象:
- 序列。包含:字符串、列表、元组
- 字典
- 迭代器对象(iterator)
- 生成器函数(generator)
- 文件对象
d = {'name':'gaoqi','age':18,'address':'西三旗 001 号楼'}
for x in d: #遍历字典所有的 key
print(x)
for x in d.keys():#遍历字典所有的 key
print(x)
for x in d.values():#遍历字典所有的 value
print(x)
for x in d.items():#遍历字典所有的"键值对"
print(x)
range对象
range 对象是一个迭代器对象,用来产生指定范围的数字序列:range(start, end [,step])
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
sum_all = 0
sum_even = 0
sum_odd = 0
for num in range(101):
sum_all += num
if num%2 == 0:
sum_even += num
else :
sum_odd += num
嵌套循环和综合练习
for 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,m+1):
print('{0}*{1} = {2}'.format(m,n,(m*n)),end = 't')
print()
r1= dict(name="高小一",age=18,salary=30000,city="北京")
r2= dict(name="高小二",age=19,salary=20000,city="上海")
r3= dict(name="高小三",age=20,salary=10000,city="深圳")
tb = [r1,r2,r3]
for x in tb:
if x.get("salary")>15000:
print(x)
break语句
break 语句可用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只能跳出最近一层的循环。
c_num = 100
while True:
a = input('please in put a number:')
a = int(a)
if a == 100:
break
elif a <100:
print('upper')
else:
print('lower')
continue语句
continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最近的一层循环。
empNum = 0
salaySum =0
salays =[]
while True:
s = input('please in put salar(Q quit)')
if s.upper() = 'Q':
break
elif float(s) <= 0:
continue
else:
empNum += 1
salaySum += float(s)
salays.append(float(s))
else语句
while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句结束,则会执行 else 子句,否则不执行。
循环代码优化技巧
- 尽量减少循环内部不必要的计算
- 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
- 局部变量查询较快,尽量使用局部变量
**比较:**将i*1000放在外层循环
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))
import time
start = time.time()
for i in range(1000):
result = []
c = i*1000
for m in range(10000):
result.append(c+m*100)
end = time.time()
print('耗时:{0}'.format(end-start))
其他优化手段
- 连接多个字符串, 使用 join()而不使用+
+拼接会产生新的字符串对象,而join()不会 - 列表进行元素插入和删除, 尽量在列表尾部操作
使用zip()并行迭代
我们可以通过 zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止
names = ("高淇","高老二","高老三","高老四")
ages = (18,16,20,25)
jobs = ("老师","程序员","公务员")
for name,age,job in zip(names,ages,jobs):
print('name:{0} ,age:{1},job:{2}'.format(name,age,job))
推导式
推导式创建序列
推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合,从而避免冗长的代码。推导式是典型的 Python 风格,会使用它代表你已经超过 Python 初学者的水平。
列表推导式
{表达式 for item in 可迭代对象}
{表达式 for item in 可迭代对象 if 条件判断}
# 推导式生成列表举例
l1 = [x*2 for x in range(10)]
print(l1)
l2 = [x*2 for x in range(10) if x%5 ==0]
print(l2)
l3 = [a for a in 'abcdefg']
print(l3)
## 可以使用两层循环
cells = [(row,col) for row in range(10) for col in range(10) ]
print(cells)
cells2 = [(row,col) for row in range(10) for col in range(10) if row%5==0 and col%5 ==0]
print(cells2)
字典推导式
{key_expression : value_expression for 表达式 in 可迭代对象}
my_text = 'i love you ,i love you sxt,i love you gaoqi '
char_count = {c:my_text.count(c) for c in my_text}
print(char_count)
集合推导式
集合推导式生成集合,和列表推导式的语法格式类似:
{表达式 for item in 可迭代对象 }
或者:{表达式 for item in 可迭代对象 if 条件判断}
c = {x for x in range(1,100) if x%9 == 0}
print(c)
生成器推导式(生成元组)
返回的是一个生成器对象,而不是元组,所以元组是没有推导式的
一个生成器只能运行一次
gnt = (x for x in range(100) if x%9 ==0)
print(gnt) #生成的是一个生成器
for x in gnt:
print(x,end = ' ')
print()
for x in gnt:
print(x,end = ' ') #第二次迭代时就空了
gnt = (x for x in range(100) if x%9 ==0)
print(gnt) #生成的是一个生成器
print(tuple(gnt)) #创建元组
综合练习
import turtle
t = turtle.Pen()
my_colors = ("red","green","yellow","black")
t.width(4)
t.speed(1)
for i in range(10): #0 1 2 3 4
t.penup()
t.goto(0,-i*10) #0, -100,-200,-300,-400
t.pendown()
t.color(my_colors[i%len(my_colors)])
t.circle(15+i*10) #100,200,300, 400,, 500
turtle.done() #程序执行完, 窗口仍然在
本文详细介绍了Python中的循环结构,包括while循环、for循环及其遍历可迭代对象,如range对象。还讨论了break、continue和else语句在循环控制中的作用,以及循环优化技巧。此外,文章讲解了推导式,如列表、字典、集合和生成器推导式的用法,并提供了综合练习题。
4258

被折叠的 条评论
为什么被折叠?



