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

看下面这段示例代码,

  1. import turtle
  2.  
  3. turtle.shape("turtle")
  4. turtle.speed(0)
  5.  
  6. def forward(max_distance):
  7. distance = 0
  8. step = 1
  9. while distance < max_distance:
  10. turtle.forward(step)
  11. distance += step
  12.  
  13. forward(100)
  14.  
  15. 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 效果是一样的,没啥意思,咪博士把代码改进一下,让它变得好玩一些。

  1. import turtle
  2.  
  3. turtle.shape("turtle")
  4. turtle.speed(0)
  5.  
  6. def forward(max_distance, max_radius):
  7. distance = 0
  8. step = 1
  9. while distance < max_distance:
  10. if turtle.distance(0,0) >= max_radius:
  11. angle = turtle.towards(0,0)
  12. turtle.setheading(angle)
  13. turtle.forward(step)
  14. distance += step
  15.  
  16. forward(550, 100)
  17.  
  18. 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 行),海龟就会往原点的方向移动,即往回爬行。

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

  1. import turtle
  2. import random
  3.  
  4. turtle.shape("turtle")
  5. turtle.speed(0)
  6.  
  7. def forward(max_distance, max_radius):
  8. distance = 0
  9. step = 1
  10. while distance < max_distance:
  11. if turtle.distance(0,0) >= max_radius:
  12. angle = turtle.towards(0,0) + random.randint(-45, 45)
  13. turtle.setheading(angle)
  14. turtle.forward(step)
  15. distance += step
  16.  
  17. forward(10000, 100)
  18.  
  19. 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. js MD5加密处理

    关于MD5: MD5.js是通过前台js加密的方式对用户信息,密码等私密信息进行加密处理的工具,也可称为插件. 在本案例中 可以看到MD5共有6种加密方法: 1,  hex_md5(value) 2, ...

  2. MP实战系列(一)之入门框架搭建和使用

    mybatis plus官网:https://github.com/baomidou/mybatis-plus 上面有对应的实际例子,直接导入即可用. mybatis plus官方的怎么介绍,我就不在 ...

  3. 序号生成算法odoo

    def get_sum_seq(self, cr, uid, ids, name, args=None, context=None): if not ids: return {} result={} ...

  4. SQL Server中删除用户时报错,提示:The database principal owns a schema in the database, and cannot be dropped(转载)

    Description of the problem: When you tried to drop a user, you got this message: Error: 15138 The da ...

  5. 【php增删改查实例】第十一节 - 部门管理模块(编辑功能)

    9. 编辑部门功能的实现 思路:只允许用户勾选一条数据,点击编辑按钮,会跳出一个和新增数据类似的对话框.然后,用户可以修改部门名称和部门编码.点击保存按钮,提示修改成功. 9.1 前台代码编写 < ...

  6. KVM虚拟机管理——虚拟机克隆

    1. 概述2. 部署基本操作系统虚拟机3. 配置虚拟机3.1 修改/etc/sysconfig/network3.2 删除/etc/sysconfig/network-scripts/ifcfg-et ...

  7. 实验三 Java敏捷开发与xp实现

    实验内容: 1. XP基础 2. XP核心实践 3. 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实 ...

  8. linux内核分析ELF文件分析实践报告

  9. Timer定时执行

    //定时器 public void timeTask(String hh,int n) {//hh="8:30:00",n=12 Timer timer = new Timer() ...

  10. github学习步骤

    组员1:    王文政      201303011159 作业网址 :https://github.com/1246251747/3/blob/master/jjj.txt 心得: 1.  申请gi ...