python_day5_循环结构

概述

循环结构用来重复执行—条或多条语句。表达这样的逻据:如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为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--公务员
发布了22 篇原创文章 · 获赞 1 · 访问量 464

猜你喜欢

转载自blog.csdn.net/ws297933371/article/details/105464684