我们的这个案例要通过Python实现,通过控制一只小乌龟喝不同颜色的墨水,当小乌龟爬行的时候,会在身后留下不同颜色的痕迹。

8.1 程序编写步骤

第一步:确定程序目标

一只爱喝墨水的小乌龟,爬的过程中留下痕迹,爬行的过程就是画线的过程。

第二步:目标分解

我们需要让小乌龟具备下面功能:

1.爬行到相应的位置;

2.更换爬行痕迹的颜色;

3.蘸不同颜色的墨水;

第三步:设计原型

设计一个能爬行能变颜色的小乌龟,作为原型。

第四步:完善程序

丰富墨水颜色数量,改变乌龟的外观

第五步:扩展程序

这个案例的进一步扩展,比如添加功能、以此为基础改成其他程序等。

8.2 原型设计

下面我们开始我们的原型制作,打开IDLE,输入以下代码:from turtle import *

pencolor('red')

goto(100,100)

运行程序,我们看到了一个箭头在屏幕上移动,并在其身后留下来一条红色的线。这个箭头就是我们的小乌龟了,一会而我们会让它真的变成乌龟的形状的。解释下代码,第一行代码from turtle import *是引入turtle类,其实这个语言本身已经为我们转备好了很多已经完成的命令,我们只需要告诉电脑我们想使用它们就可以了,这行程序就是告诉电脑我们想使用“乌龟(turtle)”类了。第二行代码pencolor('red')是告诉电脑把乌龟看成一只钢笔,并把钢笔的颜色设置成红色。第三行代码goto(100,100)是告诉小乌龟爬到坐标(100,100)的位置。

这里说一下Python Turtle的坐标系,屏幕中央是原点(0,0),水平方向X轴向右方向为正方向,垂直方向Y轴向上为正方向。

8.3 听懂更多命令

其实小乌龟还能听懂很多命令,我们继续完善原型,输入以下代码:from turtle import *

pencolor('red')

goto(100,100)

pencolor('green')

right(90)

forward(100)

left(45)

backward(100)

goto(100,-50)

运行程序之后,小乌龟爬出了新的花样,如下图所示,变了角度,变了颜色。他是怎么做到的?

乌龟爬行原型

pencolor('green')这行代码我们很熟悉了,就是把颜色由红色变成了绿色,你也可以设置其他你喜欢的颜色。right(90)、left(45)这两行就是告诉乌龟向右或向右旋转,括号中的数值是旋转的角度数值。forward(100)、backward(100)是告诉小乌龟前进或后退,括号中的数值是前进或后退的距离。最后一行代码goto(100,-50)我们也熟悉了,爬到坐标(100,-50)的位置。这些命令我们以后会经常用到,这里我们知道他们的作用就可以了。

8.4 开始蘸墨水

现在我们对照一下前文的目标分解部分,基本上实现了三个分解目标。下面我们完善一下功能。当小乌龟停在X轴大于零的地方,让它蘸红色的墨水,当她停在X轴小于零的地方,它蘸上蓝色的墨水。添加的代码如下,其中xcor()用于获取小乌龟的X坐标,if语句用于条件判断,“If xcor()>0”就是告诉小乌龟当它的X坐标大于零的时候需要做什么。If xcor()>0:

pencolor('red') else:

pencolor('blue')

8.5 用函数实现自动蘸墨水

我们上面蘸墨水的代码加入到一个函数中,简化我们的操作步骤。关于函数的具体细节我们会在后面的章节讲解,这里我们只需要理解函数是一个能够把很多命令放在一块的程序块,只要写出程序块的名字,就能运行它所包含的所有程序。我们将goto命令与上述的蘸墨水命令集合在一个函数mgt(这个名字可以改变,这里是my_goto的简写)里面。def mgt(myx,myy):

if xcor()>0:

pencolor('red') else:

pencolor('blue')

goto(myx,myy)

我们让乌龟达到某一坐标,直接调用函数mgt就可以,并在括号里填上坐标值。例如myt(100,100)就是让乌龟爬到坐标(100,100)的位置,这个过程中,乌龟会自己判断该用什么颜色留下痕迹。

我们可以用同样的方式,对forward、backward进行处理,分别命名为mfw和mbw结果如下:def mfd(num):

if xcor()>0:

pencolor('red') else:

pencolor('blue')

forward(num)def mbd(num):

if xcor()>0:

pencolor('red') else:

pencolor('blue')

backward(num)

当我们用mfd(150)的时候,乌龟会向前爬行150,并选择相应的颜色。

8.6 添加墨水池

下面我们开始第四步完善程序的部分。为了让操作更直观,我们在舞台上放置两个墨水池。代码中大部分领命我们都熟悉,只有少数新的命令。其中penup()为抬起笔,乌龟爬行就不会划线,pendown()为落笔,乌龟爬下划线。begin_fill()与end_fill()用于填充颜色,在两个语句中间画上框架,就会用fillcolor命令设置的颜色进行填充。#舞台布置#画第一个墨水池penup()goto(-300,300)

pendown()

fillcolor('red')

begin_fill()

forward(100)

right(90)

forward(100)

right(90)

forward(100)

right(90)

forward(100)

end_fill()#画第二个墨水池penup()

right(90)goto(100,300)

pendown()

fillcolor('blue')

begin_fill()

forward(100)

right(90)

forward(100)

right(90)

forward(100)

right(90)

forward(100)

end_fill()

8.7 在墨水池蘸上墨水的方法

乌龟需爬到墨水池中,爬行时候才会变为相应的颜色,这个主要通过坐标判断。if xcor()>-300 and xcor()200:

pencolor('red')if xcor()>100 and xcor()<200 and ycor()<300 and ycor()>200:

pencolor('blue')

这里的ycor()用于获取乌龟的Y坐标,与xcor()对应。 条件语句中and 属于逻辑运算中的“且”关系,表示前后两个语句都满足条件才可以执行相应的程序。这部分内容在后续章节中也有详细的讲解。我们需要将原型中mgt、mfd、mbd函数中用于设定颜色的语句改成现在的代码。

8.8 乌龟现身

下面我们让主角小乌龟变身,一行代码就可以实现。shape('turtle')

现在的代码是这个样子的:from turtle import *#设置乌龟形状shape('turtle')#舞台布置#画第一个墨水池penup()

goto(-300,300)

pendown()

fillcolor('red')

begin_fill()

forward(100)

right(90)

forward(100)

right(90)

forward(100)

right(90)

forward(100)

end_fill()#画第二个墨水池penup()

right(90)

goto(100,300)

pendown()

fillcolor('blue')

begin_fill()

forward(100)

right(90)

forward(100)

right(90)

forward(100)

right(90)

forward(100)

end_fill()def mgt(myx,myy):

if xcor()>-300 and xcor()200:

pencolor('red') if xcor()>100 and xcor()<200 and ycor()<300 and ycor()>200:

pencolor('blue')

goto(myx,myy)def mfd(num):

if xcor()>-300 and xcor()200:

pencolor('red') if xcor()>100 and xcor()<200 and ycor()<300 and ycor()>200:

pencolor('blue')

forward(num)def mbd(num):

if xcor()>-300 and xcor()200:

pencolor('red') if xcor()>100 and xcor()<200 and ycor()<300 and ycor()>200:

pencolor('blue')

backward(num)#看效果mgt(-250,250)

mbd(200)

mgt(150,250)

mbd(200)

运行效果图如图4.12所示。

最终效果图.PNG

8.9 更多可能

我们可以尝试让小乌龟做出更多种可能,比如:让小乌龟画出一个对称的图形,如三角形、空心十字架、心形等;让小乌龟画出复杂的具体图形,比如笑脸;画一幅现代艺术的线条画等。

8.10 辅助工具

像上一个案例一样,为了编程方便,这里我们也用了一个辅助辅助工具:print(xcor(),ycor())

这行代码可以输出乌龟的X坐标和Y坐标。

8.11 案例中的编程系统分析

我们来分析一下代码,所有涉及到数字、颜色的地方都属于“数据”部分。条件判断部分属于“控制”部分,比判断乌龟是否在墨水池的坐标范围内。而控制部分的条件则属于“运算”部分,如通过and进行的逻辑运算。其他的所有我们看得见的效果的实现语句就是“执行”部分,如移动距离,画直线、变颜色等。

作者:一石匠人

链接:https://www.jianshu.com/p/17ba10c0bf8d

python小乌龟编程_Python案例——喝墨水的小乌龟相关推荐

  1. python与人工智能编程-总算明白python人工智能编程入门案例

    Python是非常简洁的一种脚本语言,写同样的程序,代码量仅为java的三分一,除了性能没有Java强之外,它的优点还是相当多的.以下是小编为你整理的python人工智能编程入门案例 下载Active ...

  2. python概率编程_Python概率编程库PyMC应用案例二则,pymc应用案例

    Python概率编程库PyMC应用案例二则,pymc应用案例 这是受国防科大刘万伟老师委托发的概率编程方面的内容,这方面我不懂,为了避免解释错了,我就直接把刘老师的PPT资料截图发了. 代码执行结果为 ...

  3. python socket编程_Python Socket编程实现网络编程

    对于有经验的开发人员来说,掌握的编程语言应该是不少的.在这些编程语言中,网络编程的应用时必不可少的.其中Python也是这样的编程语言.我们今天将会在这里为大家详细介绍一下Python Socket编 ...

  4. python gpu编程_Python笔记_第四篇_高阶编程_进程、线程、协程_5.GPU加速

    Numba:高性能计算的高生产率 在这篇文章中,笔者将向你介绍一个来自Anaconda的Python编译器Numba,它可以在CUDA-capable GPU或多核cpu上编译Python代码.Pyt ...

  5. python socket编程_Python学习记录-socket编程

    1. OSI七层模型详解 2. Python socket 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答 ...

  6. python树莓派编程_python树莓派编程

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 例如,你可以用树莓派搭建你自己的家用云存储服务器.? 树莓派用python来进行 ...

  7. python多线程编程_python多线程编程(1): python对多线程的支持

    前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了. 在开始之前,首先要了解一下python对多线程的支持. 虚拟机层面 Python虚拟机使用GIL(Global ...

  8. python硬件编程_Python学习日记_《Python硬件编程实战》笔记_Mr_Ouyang

    书名: Python硬件编程实战 作者: 李茂 出版社: 机械工业出版社 [此处需要插入图片 Python封面] 笔者简评:不太适宜购买,全书大篇幅在用图片来解释极简单的细节,对于那些需要作者去深挖. ...

  9. python密码编程_Python密码学编程

    Python密码学编程 1 制作纸质加密工具 1.1 密码学是什么 1.2 代码与加密法 1.3 制作纸质加密轮盘 1.4 虚拟加密轮盘 1.5 如何使用加密轮盘加密 1.6 如何使用加密轮盘解密 1 ...

  10. python oop编程_Python 3中的面向对象编程(OOP)

    python oop编程 In this article you'll pick up the following basic concepts of OOP in Python: 在本文中,您将了解 ...

最新文章

  1. CSS中的超链接和超链接分类
  2. 2.2 图像类型转换
  3. Example of BeanFactoryAware in Spring--转
  4. python相关 MOOC第一周
  5. Linux之rm命令
  6. mydbtest文档
  7. 与7无关的数(前缀和)
  8. 数据操作(基于MXNET框架)
  9. 深入浅出统计学 笔记 总结 学习心得
  10. 《G档案》中关于游戏程序设计的文章
  11. MySQL数据库笔记6——约束Constraint
  12. 2020-12-06 高等数学:常用积分公式
  13. 网络广告的发布渠道和方式
  14. (十二)GA-RPN----2019CVPR论文解读
  15. 苹果手机网页选择框 下拉框点击放大处理
  16. 关于WireShark跟随数据流后entire conversation显示的字节数分析
  17. 七日杀 服务器不显示,七日杀进服务器不显示画面 | 手游网游页游攻略大全
  18. 理解AsyncTask
  19. 【计算机组成原理】实验1: 基本逻辑单元实验
  20. 苹果基带坏了怎么办_iPhone12 上市,苹果这次有哪些改变

热门文章

  1. 单片机c语言6种开方,单片机快速开平方的算法
  2. html里面超链接alt_怎样用HTML代码在图片插入超链接
  3. 2022年全球与中国石油和天然气固井服务行业发展趋势及投资战略分析报告
  4. canvas抖音八卦时钟,轻喷
  5. Rayman的绝顶之路——Leetcode每日一题打卡13
  6. win10网络共享打印机设置
  7. opencv学习十三:图像金字塔和图像梯度
  8. json-server 和mock.js生成大量json数据
  9. CAD二次开发C#——动态绘制矩形(DrawJig)
  10. 百度信息流 绑定服务器,百度信息流账户怎么搭建?百度信息流账户搭建教程...