条件循环能够让程序在条件成立时(即为真时)重复执行循环体中的语句。如果条件一直成立(即永远不会为假),则循环会一直进行下去,不会停止。如果初始时,条件不成立,则循环 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 是一样的,但这里我们是借助条件循环来实现的。

第 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 < max_distance: 指明了循环条件为  distance < max_distance 即,当海龟累计爬行距离 (distance) 小于规定的最大爬行距离 (max_distance) 时,执行循环体中的语句(第 12, 13 行)。

第 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()

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

第 8 行 def forward(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()

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

第 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 行),所以它最终会停止运动

原文链接:http://www.ipaomi.com/2017/11/28/python-零基础-快速入门-趣味教程-咪博士-海龟绘图-turtle-7-条/

Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 7. 条件循环的更多相关文章

  1. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 6. 条件

    前面的教程中,我们已经可以让小海龟绘制出各种图形了.但是,所有绘图的代码都是预先编好的,程序一旦运行起来,运行结果(绘制的图形)就是固定不变的.这一节中,咪博士将教大家如何让海龟响应用户的输入. im ...

  2. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 4. 函数

    什么样的程序员才是优秀的程序员?咪博士认为“慵懒”的程序员才是真正优秀的程序员.听起来不合逻辑?真正优秀的程序员知道如何高效地工作,而不是用不止境的加班来完成工作任务.函数便是程序员高效工作的利器之一 ...

  3. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环

    在前面的教程中,咪博士留了一道练习题给大家—-画正方形,相信聪明的你应该已经画出来了. 下面是咪博士实现的代码. 是不是跟你的代码很像呢? import turtle turtle.forward(2 ...

  4. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量

    大家在中学就已经学过变量的概念了.例如:我们令 x = 100,则可以推出 x*2 = 200 试试下面这段 Python 代码 import turtle turtle.shape("tu ...

  5. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友

    Python (Windows 下) 自带了一个非常有趣的 海龟绘图程序 (turtle),它是本系列课程的主角. 在 PyCharm 中,新建一个项目,然后在代码编辑器中输入 import turt ...

  6. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作

    一.关于 Python Python 是全球使用人数增长最快的编程语言!它易于入门.功能强大,从 Web 后端 到 数据分析.人工智能,到处都能看到 Python 的身影. Python 有两个主要的 ...

  7. Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 5. 参数

    上一个教程中,咪博士带大家学习了函数的使用.例如,line_without_moving 函数,可以让海龟先画出一条线段,然后再回来起点. def line_without_moving(): tur ...

  8. Python 零基础快速入门!

    “人生苦短,我学python”是编程届的名言.用python写小脚本的便捷性,让很多其他语言的学习者把python当作辅助语言.拥有了某一个语言的功底,再来学习另外一种语言应该是十分快速的.编程理念都 ...

  9. 序言 - PHP零基础快速入门

    我为什么要写<PHP零基础快速入门>? 原因: PHP 真心简单,适合零基础的人快速入门掌握,身边的人学习一两周上手开发的比比皆是: 市面上的文章或书籍对初学者并不友好,多半枯燥乏味,我相 ...

随机推荐

  1. python对word的操作

    from docx import Document from docx.shared import Inches document = Document() document.add_heading( ...

  2. [转]Qt 之 QFileSystemWatcher

    简述 QFileSystemWatcher类用于提供监视文件和目录修改的接口. QFileSystemWatcher通过监控指定路径的列表,监视文件系统中文件和目录的变更. 调用addPath()函数 ...

  3. Objective-C 事件响应链

    苹果app使用响应者对象(responder object)来接收和处理事件.响应者对象是NSResponder及其子类的实例,如NSView.NSViewController和NSApplicati ...

  4. 用Qt程序打开.txt 文件的时候,出现乱码的情况

    打开*.txt 文件出现乱码的情况,说明编码格式不对,一般的Windows下创建的txt 文件,到ubuntu 系统中打开会出现乱码的情况, 下面的代码读取文件,并且转化编码格式 void MainW ...

  5. Redis 安装部署

    1. 官网(https://redis.io/download)下载稳定版安装包 3.0.7或3.2或4.1; 2. 复制到部署服务器 /opt/redis4,解压 tar zxvf redis-4. ...

  6. Android 底部菜单会被顶起来的情况

    描述:主界面有一排底部菜单,当从主界面跳转到另一个界面,假如说这个界面有软键盘弹出,主界面的顶部菜单会被顶起来. 原因:系统软键盘造成的 解决办法:在返回主界面时将系统软键盘关掉即可

  7. kubernetes 集群机器重启后磁盘盘符变化

    1.[root@pserver78 ~]# kubectl -n rook-ceph exec -it rook-ceph-tools-c95b8496b-g4stp -- ceph osd tree ...

  8. 【数据库】Mysql中主键的几种表设计组合的实际应用效果

    写在前面 前前后后忙忙碌碌,度过了新工作的三个月.博客许久未新,似乎对忙碌没有一点点防备.总结下来三个月不断的磨砺自己,努力从独乐乐转变到众乐乐,体会到不一样的是,连办公室的新玩意都能引起莫名的兴趣了 ...

  9. 【下一代核心技术DevOps】:(七)持续集成Jenkins的应用(Aliyun Pipiline持续构建)

    1. 前言 使用Jenkins比较好的就是可以在整个构建顺序中增加自定义的动作,比如构建成功给Leader发个邮件,给团队核心发个微信什么的. 当然最基本的核心还是它可以构建多种开发语言的项目,此类构 ...

  10. Mvc_前后端绑定数据json集合

    ViewBag.SysModuleList =new  List<SysModule>(){.....}; var data = @Html.Raw(Json.Encode(ViewBag ...