Python 基础笔记 day-5 循环

本文详细介绍了Python中的循环结构,包括while循环、for循环及其遍历可迭代对象,如range对象。还讨论了break、continue和else语句在循环控制中的作用,以及循环优化技巧。此外,文章讲解了推导式,如列表、字典、集合和生成器推导式的用法,并提供了综合练习题。

循环结构

循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为 True,如果为 True 则重复执行循环体里的语句。图示如下:
在这里插入图片描述

while循环

在这里插入图片描述

num = 0
while num<=10:
print(num)
num += 1
num = 0
sum_all = 0
sum_even = 0
sum_odd = 0
while num < 100:
    sum_all += num
    if num%2 == 0:
        sum_even += num
    else:
        sum_odd += num
    num += 1

        
print("1-100 所有数的累加和",sum_all)
print("1-100 偶数的累加和",sum_even)
print("1-100 奇数的累加和",sum_odd)

for 循环和可迭代对象遍历

for 循环通常用于可迭代对象的遍历

for i in range(10):
	print(i)

可迭代对象

Python 包含以下几种可迭代对象:

  1. 序列。包含:字符串、列表、元组
  2. 字典
  3. 迭代器对象(iterator)
  4. 生成器函数(generator)
  5. 文件对象
d = {'name':'gaoqi','age':18,'address':'西三旗 001 号楼'}
for x in d: #遍历字典所有的 key
	print(x)
for x in d.keys():#遍历字典所有的 key
	print(x)
for x in d.values():#遍历字典所有的 value
	print(x)
for x in d.items():#遍历字典所有的"键值对"
	print(x)

range对象

range 对象是一个迭代器对象,用来产生指定范围的数字序列:range(start, end [,step])
for i in range(10) 产生序列:0 1 2 3 4 5 6 7 8 9
for i in range(3,10) 产生序列:3 4 5 6 7 8 9
for i in range(3,10,2) 产生序列:3 5 7 9

sum_all = 0 
sum_even = 0
sum_odd = 0
for num in range(101):
	sum_all += num
	if num%2 == 0:
		sum_even += num
	else :
		sum_odd += num

嵌套循环和综合练习

for x in range(5):
	for y in range(5):
		print(x,end = '\t')
	print()
for m in range(1,10):
	for n in range(1,m+1):
		print('{0}*{1} = {2}'.format(m,n,(m*n)),end = 't')
	print()
r1= dict(name="高小一",age=18,salary=30000,city="北京")
r2= dict(name="高小二",age=19,salary=20000,city="上海")
r3= dict(name="高小三",age=20,salary=10000,city="深圳")
tb = [r1,r2,r3]
for x in tb:
	if x.get("salary")>15000:
		print(x)

break语句

break 语句可用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只能跳出最近一层的循环。

c_num = 100
while True:
    a = input('please in put a number:')
    a = int(a)
    if a == 100:
        break
    elif a <100:
        print('upper')
    else:
        print('lower')

continue语句

continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最近的一层循环。

empNum = 0 
salaySum =0 
salays =[]
while True:
    s = input('please in put salar(Q quit)')
    if s.upper() = 'Q':
        break
    elif float(s) <= 0:
        continue
    else:
        empNum += 1 
        salaySum += float(s) 
        salays.append(float(s))
    

else语句

while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句结束,则会执行 else 子句,否则不执行。

循环代码优化技巧

  1. 尽量减少循环内部不必要的计算
  2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
  3. 局部变量查询较快,尽量使用局部变量
    **比较:**将i*1000放在外层循环
import time
start = time.time()
for i in range(1000):
    result = []
    for m in range(10000):
        result.append(i*1000+m*100)
end = time.time()
print('耗时:{0}'.format(end-start))
import time
start = time.time()
for i in range(1000):
    result = []
    c = i*1000
    for m in range(10000):
        result.append(c+m*100)
end = time.time()
print('耗时:{0}'.format(end-start))

其他优化手段

  1. 连接多个字符串, 使用 join()而不使用+
    +拼接会产生新的字符串对象,而join()不会
  2. 列表进行元素插入和删除, 尽量在列表尾部操作

使用zip()并行迭代

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

names = ("高淇","高老二","高老三","高老四")
ages = (18,16,20,25)
jobs = ("老师","程序员","公务员")

for name,age,job in zip(names,ages,jobs):
    print('name:{0} ,age:{1},job:{2}'.format(name,age,job))

推导式

推导式创建序列

推导式是从一个或者多个迭代器快速创建序列的一种方法。它可以将循环和条件判断结合,从而避免冗长的代码。推导式是典型的 Python 风格,会使用它代表你已经超过 Python 初学者的水平。

列表推导式

{表达式 for item in 可迭代对象}
{表达式 for item in 可迭代对象 if 条件判断}

# 推导式生成列表举例
l1 = [x*2 for x in range(10)]
print(l1)
l2 = [x*2 for x in range(10) if x%5 ==0]
print(l2)
l3 = [a for a in 'abcdefg']
print(l3)
## 可以使用两层循环
cells = [(row,col) for row in range(10) for col in range(10) ]
print(cells)
cells2 = [(row,col) for row in range(10) for col in range(10) if row%5==0 and col%5 ==0]
print(cells2)

字典推导式

{key_expression : value_expression for 表达式 in 可迭代对象}

my_text = 'i love you ,i love you sxt,i love you gaoqi '

char_count = {c:my_text.count(c) for c in my_text}
print(char_count)

集合推导式

集合推导式生成集合,和列表推导式的语法格式类似:
{表达式 for item in 可迭代对象 }
或者:{表达式 for item in 可迭代对象 if 条件判断}

c = {x for x in range(1,100) if x%9 == 0}
print(c)

生成器推导式(生成元组)

返回的是一个生成器对象,而不是元组,所以元组是没有推导式的
一个生成器只能运行一次

gnt = (x for x in range(100) if x%9 ==0)
print(gnt) #生成的是一个生成器
for x in gnt:
    print(x,end = ' ')
print()
for x in gnt:
    print(x,end = ' ') #第二次迭代时就空了
gnt = (x for x in range(100) if x%9 ==0)
print(gnt) #生成的是一个生成器
print(tuple(gnt)) #创建元组

综合练习

import turtle
t = turtle.Pen()
my_colors = ("red","green","yellow","black")
t.width(4)
t.speed(1)
for i in range(10): #0 1 2 3 4
    t.penup()
    t.goto(0,-i*10) #0, -100,-200,-300,-400
    t.pendown()
    t.color(my_colors[i%len(my_colors)])
    t.circle(15+i*10) #100,200,300, 400,, 500
turtle.done() #程序执行完, 窗口仍然在
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值