python中控制语句的部分内容

while 循环结构 _死循环处理

这里先跟大家说一话 当然也是跟博主自己说一句话 就是目标专一 总会有完成的那一天  

坚持 你的人生家庭财力都会有一定的改观 Be patient!

循环是用来重复执行一条或者多条语句

image-20211113153730906

# while 条件表达式:
#   循环体语句
# while打印0-10的数字
num = 0
while num<=10:
  print(num)
  num += 1
print("end")
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9
# 10
# end
# 利用while循环计算 1-100之间的累加和
num = 0
sum_all = 0
while num<=100:
  sum_all += num     # 这句话与sum_all = sum_all + num同理
  num += 1      # 这句话很重要 没有这句话就是死循环
print("1-100所有数字的累加和:",sum_all)
# 1-100所有数字的累加和: 5050

for循环结构遍历各种可迭代对象 _range对象

可迭代对象包括

  1. 序列:字符串 元组 列表
  2. 字典
  3. 迭代器对象(iterator)
  4. 生成器对象(generator)  
  5. 文件对象

 Q:什么是生成器对象?(博主的疑问 答案大多不正确 知道的伙伴可以发送至评论区 谢谢各位)

应该是元组的推导式先生成生成器对象 并且这种生成器对象只能使用一次

# for 变量 in 可迭代对象:
#     循环体语句

for x in (20,30,40):
    print(x*3)
# 60
# 90
# 120
for x in "Kyle":        # x在这里是临时变量 名字随意 只限于for循环内使用
    print(x)
# K
# y
# l
# e
d = {'name':'Kyle','age':19,'address':'world'}
for x in d:
    print(x)    #默认就是遍历字典中的所有key
# name
# age
# address
d = {'name': 'Kyle', 'age': 19, 'address': 'world'}
for x in d:
    print(d.keys())
# dict_keys(['name', 'age', 'address'])
# dict_keys(['name', 'age', 'address'])
# dict_keys(['name', 'age', 'address'])
d = {'name': 'Kyle', 'age': 19, 'address': 'world'}
for x in d:
    print(d.values())
# dict_values(['Kyle', 19, 'world'])
# dict_values(['Kyle', 19, 'world'])
# dict_values(['Kyle', 19, 'world'])
d = {'name': 'Kyle', 'age': 19, 'address': 'world'}
for x in d:
    print(d.items())
# dict_items([('name', 'Kyle'), ('age', 19), ('address', 'world')])
# dict_items([('name', 'Kyle'), ('age', 19), ('address', 'world')])
# dict_items([('name', 'Kyle'), ('age', 19), ('address', 'world')])

range 对象 

range对象是一个迭代器对象 产生指定范围的数字列表

# range(start,end,step)  # 牢记包头不包尾
for x in range(10):
    print(x,end="\t")
# 0	1	2	3	4	5	6	7	8	9
for x in range(3,10,2):
    print(x,end="\t")
# 3	5	7	9
# for循环计算1-100累加和 并计算其中偶数累加和与奇数累加和
sum_all = 0
sum_even = 0
sum_odd = 0
for num in range(101):      # 注意这里要101喔 因为range循环包头不包尾啊对不对啊? 哈哈哈哈
    sum_all += num
    if num % 2 == 0:
        sum_even += num
    else:
        sum_odd += num
print("1-100所有数字的累加和{0},偶数累加和{1},奇数累加和{2}".format(sum_all,sum_even,sum_odd))
# 1-100所有数字的累加和5050,偶数累加和2550,奇数累加和2500

嵌套循环 (或称作多重循环)

# 打印如下图案
# 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(5):
    print(0,end="\t")
print()
for x in range(5):
    print(1,end="\t")
print()
for x in range(5):
    print(2,end="\t")
print()
for x in range(5):
    print(3,end="\t")
print()
for x in range(5):
    print(4,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(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

如上两个方法得到的结果一样但是 过程显然第一个会更麻烦一些 所以遇到一些一样的公式的时候可以选择就是 运用循环来简化

# 打印9×9乘法表
for m in range(1,10):
    for n in range(1,m+1):      # 这里取到m+1 就相当但看一行的时候 5*5是最后一个一样 然后m*m(因为包头不包尾嘛 所以就是+1刚好最后一个是m)
        print("{0}*{1}={2}".format(m,n,(m*n)),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	

就是根据这个9*9乘法表的打印可以知道就是 要把大问题拆分成小问题来完成 就比如先完成一行然后再套入对应的循环 就可以直接出现整个所需要打印的案例

# 打印薪资大于15000的资料
r1 = dict(name='Kyle',age=18,salary=30000,city='青岛')
r2 = dict(name='Aha',age=19,salary=20000,city='上海')
r3 = dict(name='Curry',age=20,salary=10000,city='深圳')
tb = [r1,r2,r3]
for x in tb:
    if x.get("salary")>15000:
        print(x)
# {'name': 'Kyle', 'age': 18, 'salary': 30000, 'city': '青岛'}
# {'name': 'Aha', 'age': 19, 'salary': 20000, 'city': '上海'}

break语句 

可以用于while与for循环用来结束整个循环 如果存在嵌套循环的时候 break语句 只能跳出最近一层的循环

image-20211114112241097

while True:
    a = input("请输入一个字符(输入Q或q结束)")
    if a.upper()=='Q':
        print("循环结束 退出")
        break
    else:
        print(a)

continue 语句

结束本次循环 继续下一次

多个循环嵌套时,continue也是应用于最近的一层循环

# 要求输入员工的薪资 若薪资小于0则重新输入 最后打印出员工的数量与薪资明细 以及平均工资
empNum = 0      # 录入员工数
salarySum = 0   # 工资和
salarys = []    # 录入薪资放入列表
while True:             # 这个不要忘记了 这个是个死循环 就是会一直运行除非使用 break
    s = input("请输入员工的薪资(按Q或q结束)")
    if s.upper()=='Q':
        print("录入结束")
        break           # 直接到 print("员工数{0}".format(empNum))这一行
    if float(s)<0:
        print("无效,继续录入")
        continue        # 直接到 while True这一行
    print("录入成功")
    empNum += 1
    salarys.append(float(s))
    salarySum += float(s)

print("员工数{0}".format(empNum))
print("录入薪资:",salarys)
print("总发薪资",salarySum)
print("年均薪资{0}".format(salarySum/empNum))

循环里的 else 语句 (不同于if…else…语句中的else)

while for循环可以附带一个else语句(可选)

如果for while语句没有被break语句结束 则会执行else否则不执行

# while 条件语句:
#     循环体
# else:
#     语句
# for 变量 in 可迭代对象:
# else:
#     语句

salarySum = 0
salarys = []
for i in range(4):
    s = input("请输入一共4名员工的薪资(按Q或q中途结束)")
    if s.upper()=='Q':
        print("录入完成,退出")
        break
    if float(s)<0:
        continue
    salarys.append(float(s))
    salarySum += float(s)
else:
    print("您已经全部录入4名员工的薪资")# 如果在运行完之前运用了q会直接退出 就不会写出这句话 
print("录入薪资:",salarys)
print("平均薪资{0}".format(salarySum/4))

循环代码优化技巧:

虽然计算机越来越快 空间也越来越大 我们仍然要 在性能问题上“斤斤计较”以下三个原则 可以大大提升运行效率 避免 不必要的低效运算

  1. 尽量减少循环内部不必要计算 (如果可以放到循环外面 尽量往外放)
  2. 嵌套循环中 尽量减少内层循环计算 尽可能往外提
  3. 局部变量查询较快 尽量使用局部变量(这个还不是很了解)

其他

  1. 连接多个字符串使用join()而不使用+ (因为会创建新的列表新的字符串 )
  2. 列表元素插入和删除 尽量在列表的尾部进行操作
# # 循环代码优化测试
import time
start = time.time()
for i in range(1000):
    result = []
    for m in range(10000):
        c = i*1000
        result = result + [m*100]
end = time.time()
print("耗时:{0}".format(end-start))

print("简单循环优化后……")
start2 = time.time()
for i in range(1000):
    result = []
    c = i*1000
    for m in range(10000):
        result.append(c + m*100)
end2 = time.time()
print("简单循环后的耗时:{0}".format(end2-start2))
# 耗时:96.17549228668213
# 简单循环优化后……
# 简单循环后的耗时:0.593543291091919

zip并行迭代多个序列

可以通过zip()函数对多个序列进行迭代 zip()函数在最短序列“用完”时就会停止

names = ("高","kyle","curry","aha")
ages = (18,16,20,25)
jobs = ('老师','程序员','公务员')
for name,age,job in zip(names,ages,jobs):   #name,age,job是临时变量
    print("{0}--{1}--{2}".format(name,age,job))
# 高--18--老师
# kyle--16--程序员
# curry--20--公务员‘
names = ("高","kyle","curry","aha")
ages = (18,16,20,25)
jobs = ('老师','程序员','公务员')
for i in range(min(len(names),len(ages),len(jobs))):
    print("{0}--{1}--{2}".format(names[i],ages[i],jobs[i]))
# 高--18--老师
# kyle--16--程序员
# curry--20--公务员

两个代码不一样但是可以达到一样的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值