文章目录
思维导图
1.概述
循环结构用来重复执行—条或多条语句。表达这样的逻据:如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为True,如果为True 则重复执行循环体里的语句。图示如下;
循环体里的语句至少应该包含改变条件表达式的语句,以使循环趋于结束;否则,就会变成一个死循环
2.while 循环
语法:
while 条件表达式:
循环体语句
试验:打印1-10
num=0
while num<=10:
print(num)
num+=1
计算1-100之间数字的和
num=1
sum=0
while num<=100:
sum += num
num+=1
print(sum)
>>> 5050
3.for循环
- 概述
for循环通常用于可迭代对象的遍历,语法:
for 变量 in 可迭代对象:
循环体语句
- 可迭代对象
1.序列:列表、元组、字符串
2.字典
3.迭代器对象
4.生成器对象
5.文件对象
试验:
- 循环遍历字符串中的字符
a=list('hello')
for x in a:
print(x,end='\t')
>>>
h e l l o
- 遍历字典
a={'name':'xiaoer','age':8,'hobby':'prank'}
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
hobby
name
age
hobby
xiaoer
8
prank
('name', 'xiaoer')
('age', 8)
('hobby', 'prank')
4.range对象
- range()语法格式为:
range([start]: end :step])
start参数:可选,表示起始数字,默认是0
end参数:必选,表示结尾数字。
step参数:可选,表示步长,默认为1,步长为复数表示倒序
- 试验:
利用for循环,计算1-100数字和、偶数和、奇数和
sum=0
sum_even,sum_odd=0,0
for i in range (101):
sum+=i
if i%2==0:
sum_even=sum_even+i
if i%2==1:
sum_odd = sum_odd + i
print("总和{0},偶数和{1},奇数和{2}".format(sum,sum_even,sum_odd))
>>> 总和5050,偶数和2550,奇数和2500
5.嵌套循环
实例1:打印下图图案
for i in range(5): #遍历每一行
for n in range (5): #遍历要打印的数字
print(n,end='\t')
print()
实例2:打印九九乘法表
for i in range(1,10):
for n in range (1,i+1):
print(n*i,end='\t')
print()
6.break语句
用于for和while循环,用来结束整个循环,当有嵌套的时候,break语句只能跳出最近一层的循环
- 试验:
while True:
a=input("输入一个字符(输入q结束)")
if a=='q':
print('循环结束')
break
else:
print(a) 输入一个字符(输入q结束)5 5 输入一个字符(输入q结束)q 循环结束
Process finished with exit code 0
7.continue语句
用于结束本次循环,继续下一次,多个嵌套时,用于最近的一层
试验:输入薪资,小于0重新输入,打印员工数量和薪资
num,salary=0,0
salarys=[]
while True:
s=input("输入薪资,输入q结束")
if s=='q':
print("输入结束")
break
if int(s)<0:
continue
num+=1
salarys.append(float(s))
print(num)
print(salarys)
8.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))
不用else
i=0
a=[]
while True:
x=input("输入薪资:")
a.append(float(x))#得到一个所有员工薪资的列表
i+=1
if i==4:
print("输入完毕")
break
print("录入的薪资:",a)
ave=sum(a)/4
print("平均薪资:{0}".format(ave))
9.循环代码优化
- 三个原则
利用这三个原则可以大大提高运行效率,避免不必要的低效计算:
- 尽量减少循环内部不必要的计算
- 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
- 局部变量查询较快,尽量使用局部变量
试验:
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)))
结果:
内部计算耗时:0.5246987342834473
循环外计算耗时:0.20288538932800293
- 其他优化手段:
- 连接多个字符,使用join比+快
- 列表进行元素插入和删除,尽量在尾部
- a+=1比a=a+1快
10.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-公务员
选择结构可以参考:python基础2.0版(3)—选择结构