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 是一样的,但这里我们是借助条件循环来实现的。
第 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. 条件循环的更多相关文章
- Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 6. 条件
前面的教程中,我们已经可以让小海龟绘制出各种图形了.但是,所有绘图的代码都是预先编好的,程序一旦运行起来,运行结果(绘制的图形)就是固定不变的.这一节中,咪博士将教大家如何让海龟响应用户的输入. im ...
- Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 4. 函数
什么样的程序员才是优秀的程序员?咪博士认为“慵懒”的程序员才是真正优秀的程序员.听起来不合逻辑?真正优秀的程序员知道如何高效地工作,而不是用不止境的加班来完成工作任务.函数便是程序员高效工作的利器之一 ...
- Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 3. 循环
在前面的教程中,咪博士留了一道练习题给大家—-画正方形,相信聪明的你应该已经画出来了. 下面是咪博士实现的代码. 是不是跟你的代码很像呢? import turtle turtle.forward(2 ...
- Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量
大家在中学就已经学过变量的概念了.例如:我们令 x = 100,则可以推出 x*2 = 200 试试下面这段 Python 代码 import turtle turtle.shape("tu ...
- Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 1. 神秘朋友
Python (Windows 下) 自带了一个非常有趣的 海龟绘图程序 (turtle),它是本系列课程的主角. 在 PyCharm 中,新建一个项目,然后在代码编辑器中输入 import turt ...
- Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 0. 准备工作
一.关于 Python Python 是全球使用人数增长最快的编程语言!它易于入门.功能强大,从 Web 后端 到 数据分析.人工智能,到处都能看到 Python 的身影. Python 有两个主要的 ...
- Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 5. 参数
上一个教程中,咪博士带大家学习了函数的使用.例如,line_without_moving 函数,可以让海龟先画出一条线段,然后再回来起点. def line_without_moving(): tur ...
- Python 零基础快速入门!
“人生苦短,我学python”是编程届的名言.用python写小脚本的便捷性,让很多其他语言的学习者把python当作辅助语言.拥有了某一个语言的功底,再来学习另外一种语言应该是十分快速的.编程理念都 ...
- 序言 - PHP零基础快速入门
我为什么要写<PHP零基础快速入门>? 原因: PHP 真心简单,适合零基础的人快速入门掌握,身边的人学习一两周上手开发的比比皆是: 市面上的文章或书籍对初学者并不友好,多半枯燥乏味,我相 ...
随机推荐
- oracle 查询 磁盘使用率
SELECT d.tablespace_name "Name", TO_CHAR(NVL(a.bytes / 1024 / 1024 / 1024, 0), '99, ...
- 如何使用zabbix初级监控
如何用zabbix监控(初步使用)? 前提:必须启动mysql 和zabbix目录下的sbin中的zabbix_agentd zabbix_server,还有nginx以及php否则会报错,因为zab ...
- P4208 [JSOI2008]最小生成树计数
现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的)输出方案数对31011 ...
- (转)PostgreSQL pg_dump&psql 数据的备份与恢复
转自:https://www.cnblogs.com/chjbbs/p/6480687.html Usage: pg_dump [OPTION]... [DBNAME] 数据库名放最后,不指定默认 ...
- 51Nod 1705 七星剑
一道很新颖的概率DP,我看数据范围还以为是有指数级别的复杂度的呢 记得有人说期望要倒着推,但放在这道题上,就咕咕了吧. 我们考虑正着概率DP,设\(fi\)表示将剑升到\(i\)颗星花费的期望,这样我 ...
- DELL升级bios方式
升级过程其实很简单 1.官网下载exe文件,放入U盘 2.重启电脑F12选择升级bios 3.选择U盘里面的升级文件 4.重点来了!!! boot options 是什么? 就是boot设置里面自己自 ...
- P3830 [SHOI2012]随机树
P3830 [SHOI2012]随机树 链接 分析: 第一问:f[i]表示有i个叶子结点的时候的平均深度,$f[i] = \frac{f[i - 1] + 2 + f[i - 1] * (i - 1) ...
- [JDBC]你真的会正确关闭connection吗?
Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DriverManag ...
- GitFlow原理浅析
一.Git优点 分布式存储 , 本地仓库包含了远程仓库的所有内容 . 安全性高 , 远程仓库文件丢失了也不怕 优秀的分支模型 , 创建/合并分支非常的方便 方便快速 , 由于代码本地都有存储 , 所以 ...
- React Native 教程:001 - 如何运行官方控件示例 App
原文发表于我的技术博客 本文主要讲解了如何运行 React Native 官方控件示例 App,包含了一些 React Native 的基础知识以及相关环境的配置. 原文发表于我的技术博客 React ...