循环结构
循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为 True,如果为 True 则重复执行循环体里的语句。图示如下:
while循环
while 循环的语法格式如下:
while 条件表达式:循环体语句
for循环和可迭代对象遍历
for 循环通常用于可迭代对象的遍历。for 循环的语法格式如下: for 变量 in 可迭代对象:循环体语句
可迭代对象
Python 包含以下几种可迭代对象:
- 序列。包含:字符串、列表、元组
- 字典
- 迭代器对象(iterator)
- 生成器函数(generator)
- 文件对象
range对象
range 对象是一个迭代器对象,用来产生指定范围的数字序列。格式为:
range(start, end [,step])
生成的数值序列从 start 开始到 end 结束(不包含 end)。若没有填写 start,则默认从 0
开始。step 是可选的步长,默认为 1。如下是几种典型示例: 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
break语句
break 语句可用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只能跳出最近一层的循环。
continue语句
continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最近的一层循环。
else语句
while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句结束,则会执行 else 子句,否则不执行。语法格式如下:
while 条件表达式:循环体 else:
语句块
或者:
for 变量 in 可迭代对象:循环体 else:
语句块
使用 zip()并行迭代
我们可以通过 zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止。
列表推导式
列表推导式生成列表对象,语法如下:
[表达式 for item in 可迭代对象 ] 或者:{表达式 for item in 可迭代对象 if 条件判断}
字典推导式
字典的推导式生成字典对象,格式如下:
{key_expression : value_expression for 表达式 in 可迭代对象}
类似于列表推导式,字典推导也可以增加 if 条件判断、多个 for 循环。
集合推导式
集合推导式生成集合,和列表推导式的语法格式类似:
{表达式 for item in 可迭代对象 } 或者:{表达式 for item in 可迭代对象 if 条件判断}
随堂训练
a={'name':'ding','age':18,'job':'student'}
for x in a.keys():
print(x)
print("#################")
#100以内奇数和
sum=0
for i in range(100):
if i%2==0:
sum=sum+i
print(sum)
H:\Anaconda3\python.exe H:/PycharmProjects/MyDemo/day5/demo1.py
name
age
job
#################
2450
Process finished with exit code 0
#打印9x9乘法表
for i in range(1,10):
for j in range(1,i+1):
print("{0}x"
"{1}={2}".format(i,j,i*j),end="\t")
print()
H:\Anaconda3\python.exe H:/PycharmProjects/MyDemo/day5/demo2.py
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
Process finished with exit code 0
salary=[]
t=0
sum=0
for i in range(4):
s=input("请输入薪资P(按Q或q结束):")
if s.upper()=='Q':
print("录入中断,退出")
break
if float(s)<0:
print("重新输入!")
continue
t+=1
salary.append(float(s))
sum+=float(s)
else:
print("全部录入完成")
print("员工数:{0}".format(t))
print("录入薪资:{0}".format(salary))
print("平均薪资:{0}".format(sum/t))
H:\Anaconda3\python.exe H:/PycharmProjects/MyDemo/day5/demo3.py
请输入薪资P(按Q或q结束):12
请输入薪资P(按Q或q结束):23
请输入薪资P(按Q或q结束):24
请输入薪资P(按Q或q结束):62
全部录入完成
员工数:4
录入薪资:[12.0, 23.0, 24.0, 62.0]
平均薪资:30.25
Process finished with exit code 0
#zip并行迭代
names=("ding1","ding2","ding3")
ages=(18,20,19)
address=("hangzhou","shanghai","beijing")
for names,ages,address in zip(names,ages,address):
print("{0}---{1}---{2}".format(names,ages,address))
H:\Anaconda3\python.exe H:/PycharmProjects/MyDemo/day5/demo4.py
ding1---18---hangzhou
ding2---20---shanghai
ding3---19---beijing
Process finished with exit code 0
#字典推导式
my_text="I love you blake, I love you baby"
char_count={c:my_text.count(c)for c in my_text}
print(char_count)
#集合推导式
m={x for x in range(1,100)if x%9==0}
print(m)
#生成器推导式(生成元组)
gnt=(x for x in range(4))
print(gnt)
print(tuple(gnt))
H:\Anaconda3\python.exe H:/PycharmProjects/MyDemo/day5/demo5.py
{'I': 2, ' ': 7, 'l': 3, 'o': 4, 'v': 2, 'e': 3, 'y': 3, 'u': 2, 'b': 3, 'a': 2, 'k': 1, ',': 1}
{99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}
<generator object <genexpr> at 0x00000181D9B48248>
(0, 1, 2, 3)
Process finished with exit code 0
#画⚪
import turtle
my_colors=("red","blue","green","yellow","black")
for i in range(100):
turtle.penup()
turtle.goto(0,-i*10)
turtle.pendown()
turtle.color(my_colors[i%len(my_colors)])
turtle.circle(10+i*10)
turtle.done()
#画棋盘
import turtle
# turtle.goto(x,180)
for i in range(0, 181, 10):
turtle.goto(180, i)
turtle.penup()
turtle.goto(0, i+10)
turtle.pendown()
for j in range(0,181,10):
turtle.penup()
turtle.goto(j,0)
turtle.pendown()
turtle.goto(j,180)
turtle.done()