概述
循环结构用来重复执行—条或多条语句。表达这样的逻据:如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为True,如果为True 则重复执行循环体里的语句。
循环体里的语句至少应该包含改变条件表达式的语句,以使循环趋于结束;否则,就会变成一个死循环
while循环
语法:
while 条件表达式:
循环体语句
试验:打印1-10
num=1
while num<=10:
print(num)
num=num+1
计算1-100之间数字的和
num=1
sum=0
while num<=100:
sum=sum+num
num+=1
print(sum)
for循环
for循环通常用于可迭代对象的遍历,语法:
for 变量 in 可迭代对象:
循环体语句
- 可迭代对象
1.序列:列表、元组、字符串
2.字典
3.迭代器对象
4.生成器对象
5.文件对象
试验:
循环遍历字符串中的字符
a='listmunt'
for x in a:
print(x,end='\t')
遍历字典
a={'name':'wangs','age':'24','work':'studer'}
for x in a:#遍历所有的键
print(x,end='\t')
print()
for x in a.keys():#遍历所有的键
print(x, end='\t')
print()
for x in a.values(): # 遍历所有的值
print(x, end='\t')
print()
for x in a.items(): # 遍历所有的键值对
print(x, end='\t')
print()
name
age
work
name
age
work
wangs
24
studer
('name', 'wangs')
('age', '24')
('work', 'studer')
range对象
range()语法格式为:
range([start]: end :step])
start参数:可选,表示起始数字,默认是0
end参数:必选,表示结尾数字。
step参数:可选,表示步长,默认为1,步长为复数表示倒序
试验:
利用for循环,计算1-100数字和、偶数和、奇数和:
sum=0
sum_even=0
sum_odd=0
for i in range(101):
sum+=i
if i%2==0:
sum_even+=i
else:
sum_odd+=i
print("总和{0},偶数和{1},奇数和{2}"
.format(sum,sum_even,sum_odd))
总和5050,偶数和2550,奇数和2500
嵌套循环打印
实例1:
for x in range(5):
for y in range(5):
print(x,end='\t')
print()
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
实例二:
for x in range(1,10):
for y in range(1,x+1):
print('{0}*{1}={2}'.format(x,y,(x*y)),end=('\t'))
print()
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
Break语句
用于for和while循环,用来结束整个循环,当有嵌套的时候,break语句只能跳出最近一层的循环
while True:
a=input("输入一个字符(输入Q或q结束)")
if a.upper()=='Q':
print('循环结束')
break
else:
print(a)
输入一个字符(输入Q或q结束)
输入一个字符(输入Q或q结束)q
循环结束
continue语句
用于结束本次循环,继续下一次,多个嵌套时,用于最近的一层
试验:输入薪资,小于0重新输入,打印员工数量和薪资
Num=0
salarysum=0
salay=0
while True:
s=input('请输入员工薪资(按Q或者q结束)')
if s.upper()=='Q':
print('录入完成')
break
if float(s)<0:
continue
Num+=1
salarysum+=float(s)
print("员工数",Num)
print("薪资:",salarysum)
print("平均薪资",salarysum/Num)
请输入员工薪资(按Q或者q结束)2000
请输入员工薪资(按Q或者q结束)3000
请输入员工薪资(按Q或者q结束)q
录入完成
员工数 2
薪资: 5000.0
平均薪资 2500.0
Process finished with exit code 0
else语句
while、for 循环可以附时带一个else语句(可选)。如果for、while 语句没有被break语句结束,则会执行else子句,否则不执行。语法格式如下:
while 条件表达式:
循环体
else:
语句块
for 变量 in 可迭代对象:
循环体
else:
语句块
试验:录入员工四人的薪资,全部录入后,打印提示“输入完毕”,最后,打印录入薪资和平均薪资
salary=[]
for i in range(4):
a=input("请输入薪资:(输入q结束)")
if a=='q':
break
salary.append(float(a))
else:
print("输入完毕")
ave=sum(salary)/4
print(ave)
print("录入的薪资:",salary)
print("平均薪资:{0}".format(ave))
循环代码优化
三个原则
利用这三个原则可以大大提高运行效率,避免不必要的低效计算:
尽量减少循环内部不必要的计算
嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
局部变量查询较快,尽量使用局部变量
其他优化手段
连接多个字符,使用join比+快
列表进行元素插入和删除,尽量在尾部
a+=1比a=a+1快
import time
start1=time.time()
for i in range(1000):
result=[]
for m in range(1000):
result.append(i*1000+m*100)
end1=time.time()
print("内部计算耗时:{0}".format((end1-start1)))
start2=time.time()
for i in range(1000):
result=[]
a=i * 1000 + m * 100
for m in range(1000):
result.append(a)
end2=time.time()
print("循环外计算耗时:{0}".format((end2-start2)))
使用zip()并行迭代
可以通过zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止
names =("小二","小五","小六")
ages =(18,16,20)
jobs =("老师","程序员","公务员")
for name,age,job in zip(names, ages, jobs):
print("{0}-{1}-{2}".format(name,age,job))
小二-18-老师
小五-16-程序员
小六-20-公务员
names =("小二","小五","小六")
ages =(18,16,20)
jobs =("老师","程序员","公务员")
for i in range(3):
print('{0}--{1}--{2}'.format(names[i],ages[i],jobs[i]))
小二--18--老师
小五--16--程序员
小六--20--公务员