python画图零基础入门教程_Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 7. 条件循环...

条件循环能够让程序在条件成立时(即为真时)重复执行循环体中的语句。如果条件一直成立(即永远不会为假),则循环会一直进行下去,不会停止。如果初始时,条件不成立,则循环 1 次也不会执行。Python 中条件循环使用 while 关键字来实现。

看下面这段示例代码,

import turtle

turtle.shape("turtle")

turtle.speed(0)

def forward(max_distance):

distance = 0

step = 1

while distance < max_distance:

turtle.forward(step)

distance += step

forward(100)

turtle.exitonclick()

函数 forward 实现的功能和原版的 turtle.forward 是一样的,但这里我们是借助条件循环来实现的。

cec96c8df55c

image

第 5 行 turtle.speed(0) 设置海龟爬行的速度。速度的取值为 [0, 10]。当取值在 [1, 10] 之间时,数值越大,绘图的速度就越快。当取值为 0 时,海龟将以最快的速度绘图。这里,我们让海龟以最快的速度爬行。因为,在我们自定义的 forward 函数中(第 8-13 行),我们要让海龟移动很多步,但每次只移动 1 个很小的距离,为了尽快看到最终绘图的效果,我们得让海龟爬得快一些。

第 8 行 def forward(max_distance): 声明 forward 函数,它有 1 个参数 max_distance。这个函数要实现的功能是,让海龟一直爬行,直到海龟总的爬行距离达到(或超过) max_distance 时才停止爬行。

第 9 行 distance=0 变量 distance 用于记录当前海龟已经累计爬行了多远的距离。初始时,海龟还没有开始爬行,因此 distance 的初始值为 0。

第 10 行 step=1 设置海龟爬行的步长,即每 1 步要爬多远的距离。

第 11-13 行是用 while 语句实现的条件循环,其中第 11 行, while distance

第 12, 13 行是循环体,其中第 12 行 turtle.forward(step) 让海龟以指定步长 step 前进一小段距离。第 13 行 distance+=step 这是一种简写的形式,它等价于 distance=distance+step ,即将海龟刚才(第 12 行)爬行的那一小段距离累加到 distance 变量中。类似 for 循环,while 循环的循环体(第 12, 13 行)也要比 while 语句所在的行(第 11 行),向右缩进一些,通常我们用连续的 4 个空格来表示一级的缩进。

不过,现在的 forward 跟原版的 turtle.forward 效果是一样的,没啥意思,咪博士把代码改进一下,让它变得好玩一些。

import turtle

turtle.shape("turtle")

turtle.speed(0)

def forward(max_distance, max_radius):

distance = 0

step = 1

while distance < max_distance:

if turtle.distance(0,0) >= max_radius:

angle = turtle.towards(0,0)

turtle.setheading(angle)

turtle.forward(step)

distance += step

forward(550, 100)

turtle.exitonclick()

再次运行程序,你会看到海龟在一条直线上折返爬行。

cec96c8df55c

image

第 8 行 def forwar(max_distance,max_radius): 我们为 forward 函数引入了一个新的参数 max_radius。后面,我们要实现的功能是当海龟离开原点的距离达到(或超过) max_radius 时,就调头往回爬,即往复爬行。

实现往复爬行对应的代码在第 12-14 行。

第 12 行 if turtle.distance(0,0)>=max_radius: ,其中 turtle.distance(0,0) 返回的是海龟与原点 (0, 0) 的距离。因此,当海龟与原点的距离达到或超过 max_radius 时,if 条件成立,程序将执行相应的语句(第 13, 14 行)。

第 13 行 angle=turtle.towards(0,0) ,其中 turtle.towards(0,0) 返回的是海龟朝向原点 (0, 0) 的角度。计算角度时,水平向右为 0 度,逆时针方向为角度增大的方向。

第 14 行 turtle.setheading(angle) 直接设定海龟的朝向,由于前面(第 13 行),将 angle 的值设置为海龟朝向原点的角度,所以这里经过 setheading 设置之后,海龟将朝向原点的方向。因此,后面再调用 turtle.forward (第 15 行),海龟就会往原点的方向移动,即往回爬行。

现在,海龟能够在一条直线上往复爬行,虽然比之前改进了一些,但还是显得比较单调。接下来,咪博士再进一步改进代码,让它变得更生动一些。

import turtle

import random

turtle.shape("turtle")

turtle.speed(0)

def forward(max_distance, max_radius):

distance = 0

step = 1

while distance < max_distance:

if turtle.distance(0,0) >= max_radius:

angle = turtle.towards(0,0) + random.randint(-45, 45)

turtle.setheading(angle)

turtle.forward(step)

distance += step

forward(10000, 100)

turtle.exitonclick()

运行上面的代码,你会看到海龟随机地往返爬行。刚开始,你看不出什么规律,但等它爬行一段时间之后,你会发现海龟实际上是被限制在一个圆圈当中运动。

cec96c8df55c

image

第 2 行 import random 导入 random 模块,用于生成随机数。

第 14 行 angle=turtle.towards(0,0)+random.randint(-45,45) 其中的 random.randint (-45,45) 用于产生 [-45, 45] 之间的随机整数,将这个随机整数加到朝向原点的角度上,这样海龟就不再精确地朝向原点,而是有一个随机波动的角度。因此,海龟就不再精确地按原路返回,从而摆脱直线的束缚。

但是,原来的 2 个约束依然存在:

海龟离开原点的距离不能超过 max_radius(第 13 行),所以它被限制在一个圆圈中运动

海龟总的运动距离不能超过 max_distance (第 12 行),所以它最终会停止运动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值