循环四要素
-
循环的初始:待解决的问题应该从哪里开始计算
-
循环的继续条件(结束条件):重复时需要满足哪些条件
-
循环体:哪些代码需要重复的去执行
-
循环的步长、周期、间距、计数:控制循环的进度,每一次循环之间需要有一个可变的量来控制循环
距离:向前走10步
-
循环的初始:从第1步开始走
-
循环的继续条件:有没有达到第10步
-
循环体:向前走1步
-
循环的步长、周期、间距、计数:当前走了第几步
循环执行的流行:1-2-3-4-2-3-4-2-3-4....直到2不满足为止
在Python当中,循环语句主要有两种:
-
for循环
-
while循环
for循环
主要用于已知循环次数的情况
语法结构:
for i in range(a,b,c):
code
"""
i指的就是控制变量 变量名默认是i 当然我们也可以自己改变重新命名
a,b分别表示计数:a初始,b结束 都是整数 [a,b)
c指的是步长/变化/间距:从a-b你是一个一个的走,还是两个两个的走 c默认1
code:需要被循环执行的代码
"""
# 将一个输出语句打印10次
for i in range(1,11):
print("Hello World!")
for i in range(1,11):
print(i)
"""
1 2 3 4 5 6 7 8 9 10 11
i
i取的是从1~10之间的数字 步长为1
1 2 3 4 5 6 7 8 9 10
"""
for i in range(1,11,2):
print(i)
"""
1 2 3 4 5 6 7 8 9 10 11
i
i取的是从1~10之间的数字 步长为2
1 3 5 7 9
"""
"""
range(a,b,c)
默认从a到b,步长为c 递增关系 等差关系(等差为c)
"""
for i in range(1,10,-1):
print(i)
"""
此时步长为-1 应该是递减关系 但是开始是1结束是10
从1到10具有递减关系吗?没有的 循环不执行
"""
for i in range(10,1,-1):
print(i)
for i in range(10,1,-2):
print(i)
"""
上述就是一个纯粹的递减关系
"""
"""
对于range(a,b,c)总结
如果不写c 默认从a到b是递增的关系 步长为1 a <= b
如果写c
c > 0 递增关系 a <= b
c < 0 递减关系 a <= b
c == 0 不可以的 代码报错
"""
for i in range(1,11,0):
print(i)
# 代码报错 ValueError: range() arg 3 must not be zero
根据问题的规律,来找递增递减的关系
打印
*****
*****
*****
*****
"""
# 如果循环体是一行***** 执行四次
for i in range(1,5):
print("*****")
# 如果循环体是一个*
"""
A事件:把打印一个*重复5次 然后换行
B事件:把A事件重复执行4次
"""
for k in range(1,5):
for i in range(1,6):
print("*", end = "")
print()
"""
*
**
***
****
*****
******
"""
for n in range(2,8):
for i in range(1,n):
print("*", end = "")
print()
# 数值上调整
for n in range(1,7):
for i in range(1, n + 1):
print("*", end = "")
print()
"""
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
行之间 递增关系i 1~6
行内 递增关系 num 1~i
"""
for i in range(1,7):
for num in range(1,i + 1):
print(num, end = " ")
print()
"""
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
行之间 递减关系i 6~1
行内 递增关系 num 1~i
"""
for i in range(6,0,-1):
for num in range(1,i + 1):
print(num, end = " ")
print()
"""
6
6 5
6 5 4
6 5 4 3
6 5 4 3 2
6 5 4 3 2 1
行之间 递减关系 i 6~1
行内 递减关系 num 6~i
"""
for i in range(6,0,-1):
for num in range(6,i - 1,-1):
print(num, end = " ")
print()
"""
6 5 4 3 2 1
6 5 4 3 2
6 5 4 3
6 5 4
6 5
6
行之间 递增关系 i 1~6
行内 递减关系 num 6~i
"""
for i in range(1,7):
for num in range(6,i - 1,-1):
print(num, end = " ")
print()
while循环
主要用于未知循环次数,但是已知循环结束条件的情况
举例:向前走,一直碰到墙为止
练习:
for i in range(1,8): //首先第一步判断行与行之间是递增关系
for n in range(1,8-i): //从第一行开始每一行会有 n个空格 第一行6 第二行5以此类推
print(" ",end="")
for j in range(-i+1,i): // 每一行数字满足关系试 y=|x|+1
print(abs(j)+1,end="")
print()
for i in range(1,9): //行与行之间关系递增
for k in range(1,9-i): //每行开始会有空格
print(" ",end="")
for j in range(1-i,i): // 找到数字之间的关系为2**(i-1-|j|)
num = 2**(i-1-abs(j))
print("%4d" % (num),end="") // 因为数字有一位,两位,三位 所以使用格式化输出
print()
turtle.speed(0)
turtle.pensize(1)
turtle.penup() //定义坐标轴原点位(0,0)
turtle.goto(0,150)
turtle.pendown() //画X,Y轴
turtle.goto(0,-150)
turtle.penup()
turtle.goto(-200,0)
turtle.pendown()
turtle.goto(200,0)
sin
turtle.penup()
turtle.color("blue") //定义正切函数为蓝色
for x in range(-200,201): //x的取值范围为200,200
turtle.goto(x,30*math.sin((x/50)*math.pi) //将sin函数的振幅扩大30 定义每25为派/2
turtle.pendown()
cos
turtle.penup()
turtle.color("red")
for x in range(-200, 201):
turtle.goto(x, 30 * math.cos(x / 50) * math.pi)
turtle.pendown()
turtle.done()
side=20 //定义每个方框的边长
turtle.penup()
turtle.goto(0,0) //建立坐标原点
turtle.pendown()
for c in range(0,9): //设置列数为9
for r in range(0,9): //行数也为9
if (c+r)%2==1: //找到黑色方块的规律为行号和列号相加为奇数
turtle.begin_fill()
turtle.color("black")
turtle.penup()
turtle.goto(r*side,c*side) //找到每个小方块的左下角的坐标
turtle.pendown()
turtle.left(90) //从左下角开始画方框
turtle.forward(20)
turtle.left(90)
turtle.forward(20)
turtle.left(90)
turtle.forward(20)
turtle.left(90)
turtle.forward(20)
turtle.end_fill()
turtle.hideturtle()
turtle.done()
side=10 //定义每个小方格的边长
turtle.penup()
turtle.goto(0,0) //起始坐标
turtle.pendown()
turtle.speed(0)
for c in range(0,20):
for r in range(0,20):
turtle.penup()
turtle.goto(r*side,c*side)
turtle.pendown()
turtle.left(90)
turtle.forward(side)
turtle.left(90)
turtle.forward(side)
turtle.left(90)
turtle.forward(side)
turtle.left(90)
turtle.forward(side) //此上都为画小方格
turtle.penup()
turtle.goto(100,100)
turtle.color("red") //将游走线的颜色设为红色
turtle.pensize(2)
turtle.pendown()
turtle.hideturtle()
nowX =100 //中心点坐标
nowY=100
while 0<=nowX<200 and 0<nowY<200: //while循环 定义游走线边界
""" 随机走"""
Q=random.randint(0,3) //自定义随机走的路线
freego=turtle.setheading(Q*90)
turtle.forward(10) //定义每次走的长度
if Q==0:
nowX+=10
elif Q==1:
nowY+=10
elif Q==2:
nowX-=10
else:
nowY-=10
# 中心点 100,100
turtle.done()