python基础2.0版(4)—循环结构

思维导图

在这里插入图片描述

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.循环代码优化

- 三个原则

利用这三个原则可以大大提高运行效率,避免不必要的低效计算:

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

试验:

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)—选择结构

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值