当前位置:   article > 正文

Python-Turtle库-从入门到精通_python turtle

python turtle

Introduction

在本教程中,你将会学习到以下内容:

  • 了解什么是Python的turtle库
  • 学习如何在本机配置turtle库
  • 利用turtle库进行编程
  • 掌握常用的turtle库指令
  • 基于turtle库开发一个小demo

本教程来源于Real Python,一个风趣幽默的Python学习社区,强烈推荐大家关注。

What’s the turtle library?

turtle是一个预安装的Python库,它允许用户通过提供的虚拟画布来创建图片和形状。其中,用于屏幕上绘图的笔叫做海龟笔,这便是该库名称的由来。简而言之,Python海龟库可以帮助新程序员以一种有趣和交互式的方式感受用Python编程是什么样子的。

使用海龟库,人们可以绘制和创建各种类型的形状和图像。

Bing Dwen Dwen

这似乎看起来很酷,对吧?其实这仅是Python海龟库可以绘制的众多不同图像之一,大多数开发人员使用海龟库来绘制形状、创建设计和制作图像。此外,还可以用于创建迷你游戏和动画。

Getting Started With turtle

在正式开始之前,我们需要预先配置和安装Python环境,教程如下。

Python编程入门之环境搭建

在开始Python编程之前,大家需要了解什么是。在现实世界中,图书馆是一个储存不同类型书籍的地方。你可以在任何时候访问这些书,并从中获取任何你需要的信息,随后再将它们归还到同一个地方。

在计算机世界中,库的工作原理与此类似。根据定义,库是一组重要的函数和方法,您可以通过访问这些函数和方法来简化编程。例如,Python内置的海龟库中便包含了创建映像所需的所有方法和函数。要访问Python库之前,我们可以利用Python内置的关键字import将其导入到本地的Python环境中。

import turtle
  • 1

是不是非常简洁?更多关键字信息感兴趣的可以进入此文了解。

Python编程入门之内建函数

Turtle是一个图形库,这意味着我们需要创建一个单独的窗口(屏幕)来执行每个绘图命令。这里,我们可以通过为它初始化一个变量来创建这个屏幕。

在Python中,变量可以用来存储程序中使用的信息。在为变量赋值时初始化变量。不同于常量,变量可以在程序执行期间多次更改。

现在,让我们正式开始海龟绘画!首先,你需要按以下方法为它初始化一个变量:

s = turtle.getscreen()
  • 1

不出意外的话,你应该会看到一个单独的窗口打开。

turtle.getscreen()

这个窗口便是绘画屏幕,在这里可以查看代码的输出,屏幕中间的黑色小三角形便叫做turtle,后续的所有操作几乎都是靠它实现。

注意:请记住,当我们为变量命名时,需要选择一个任何正在查看你所编写程序的人都能容易理解的名称。但是,您还必须选择一个便于使用的名称,特别是那些需要我们在整个程序中经常调用它的变量名称!

例如,选择像 my_turtle_screen_name 这样的名称将是冗长乏味的,而像Joe或a这样的名称将显得非常随意。使用单个字母字符,比如本例中的s,可能会更合适,因为它简短易记,s指的是屏幕(screen)。

接下来,初始化变量t。其中Turtle()turtle库所封装的一个类,提供了许多有用的接口,这里我们对其进行实例化。

t = turtle.Turtle()
  • 1

就像屏幕一样,您也可以给这个变量另一个名称,如a或Jane,甚至my_turtle,但在本教程中,我们采用字母t代替。

现在我们已经具备了一块屏幕和一只海龟画笔。想象一下,屏幕好比是一块画布,而海龟就是一支笔,我们可以让海龟在屏幕上移动。此处的海龟拥有一些可变的特征,如画笔粗细、颜色和移动速度。它总是指向一个特定的方向,并且会朝我们所指定的方向移动:

  • 当画笔向上时,意味着当它移动时没有线会被画出来。
  • 当画笔向下时,意味着当它移动时会画出一条线出来。

在下一节中,我们将继续探索使用海龟库进行编程的不同方法。

giphy

Programming With turtle

在使用Python海龟库进行编程时,我们将首先学习的第一件事是如何让海龟按照期望的方向进行移动。接下来,我们将学习如何自定义海龟及其环境。最后,你将学习到一些可以执行一些特殊任务的增强型命令。

Moving the Turtle

海龟笔可以朝四个方向移动,对应的编程指令对应如下:

指令              编程                 等价缩写
-------------------------------------------
前进(Forward)  —— t.right(dist)    —— t.rt(dist)
后退(Backward) —— t.forward(dist)  —— t.fd(dist) 
向左(Left)     —— t.left(dist)     —— t.lt(dist)
向右(Right)    —— t.backward(dist) —— t.bk(dist)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里dist指的是移动距离(distance).

我们还可以从当前位置到屏幕上的任何其他任意位置画一条线:

coordinates

如上所示,屏幕分为四个象限。海龟在程序开始时的初始位置为(0,0),这里定义为原点。当我们要将海龟移动到屏幕上的任何其他区域,我们可以使用t.goto(x, y)进行移动,如:

t.goto(100,100)

此时,如果我们想要回到原点,只需输入t.home()即可,当然你也可以直接以坐标的形式输入t.goto(0, 0).

Drawing a Shape

上一小节,我们学会了如何控制海龟前进,下面将教大家绘制实际的形状样式。首先,我们先从一个简单的多边形入手。可以思考一下,一个多边形主要由什么组成?没错,多边形是由多条边和角度所构成,假设我们输入以下的代码:

t.fd(100)
t.rt(90)
t.fd(100)
t.rt(90)
t.fd(100)
t.rt(90)
t.fd(100)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

那么,我们便能画出一个简单的正方形出来,大家可以逐行理解下。

polygons

Well done! 我们刚刚成功画了一个正方形,虽然还比较基础,但是举一反三,通过这种方式,我们可以利用海龟来创建不同的形状和图像。

现在,尝试使用这段代码作为模板绘制一个矩形。记住,在矩形中,四条边不相等,所以需要你相应地修改代码。一旦你掌握了海龟的绘画技巧,你甚至可以尝试通过增加边的数量和改变角度来创建更多的形状。

Drawing Preset Figures

假设你想画一个圆,如果你试图用同样的方法画它就像你画正方形一样,那么这将是非常乏味的,你将不得不花很多时间仅仅为了得到一个圆的形状。值得庆幸的是,海龟库为此提供了一个解决方案t.circle(radius)

t.circle(60)

括号内的数字是圆的半径,我们可以通过改变圆的半径值来改变圆的大小。基于类似的方法t.dot(radius),我们也可以画出一个点,它只是一个经过填充的圆:

t.dot(20)

到目前为止,我们已经学习了如何移动海龟,并使用它创建不同的形状。在接下来的几节中,我们将了解到如何根据特定的需求定制属于你自己的图案。

Changing the Screen Color

默认情况下,turtle总是打开一个白色背景的屏幕。但是,你可以用下面的命令随时改变屏幕的颜色:

turtle.bgcolor("blue")

你可以用其他颜色代替blue,例如试试greenred,我们会得到如上的结果。你可以为你的屏幕使用各种颜色,只需要输入相应的十六进制码即可,如#285078。要了解关于使用不同颜色的更多信息,请查看Python-turtle库对应的官方文档

Changing the Screen Title

有时,我们可能想要更改屏幕的标题,这样可以让它更个性化。你可以使用下面的命令改变屏幕的标题:

turtle.title("My Turtle Program")

通过这种方式,我们便可以根据自己的喜好随意更改屏幕标题。

Changing the Turtle Size

除了改变画笔的颜色和屏幕标题外,我们还可以增加或减少屏幕上海龟的大小。注意,这只会改变形状的大小,而不会影响海龟在屏幕上绘制时的输出。尝试输入以下命令:

t.shapesize(1,5,10)
t.shapesize(10,5,1)
t.shapesize(1,10,5)
t.shapesize(10,1,5)
  • 1
  • 2
  • 3
  • 4

你将会得到以下输出:

Turtle Size

t.shapesize()所提供的三个参数分别为:

  • 拉伸长度(Stretch length)
  • 拉伸宽度(Stretch width)
  • 轮廓宽度(Outline width)

我们可以根据自己的喜好更改这些设置。在上面的例子中,你可以看到海龟的外观有明显的不同。有关如何更改海龟大小的更多信息,请查看Python-turtle库对应的官方文档

Changing the Pen Size

前面的命令只改变了海龟形状的大小。然而,有时我们可能需要增加或减少画笔的厚度,此时我们可以使用以下命令来完成此操作:

t.pensize(5)
t.forward(100)
  • 1
  • 2

thickness

如上所示,现在画笔的大小是原来的5倍。大家可以尝试多画一些不同尺寸的线,以比较它们之间的粗细差别。

Changing the Turtle and Pen Color

当我们第一次打开一个新屏幕时,海龟开始是一个黑色的图形,并用黑色墨水绘制。为此,我们可以做两件事情:

  • 改变海龟的颜色:这将改变填充的颜色。
  • 改变钢笔的颜色:这将改变轮廓或墨水的颜色。

如果你愿意,你甚至可以选择这两种。在改变颜色之前,增大海龟的大小,以帮助您更清楚地看到颜色差异。输入以下代码:

t.shapesize(3,3,3)
  • 1

现在,要改变海龟(或填充)的颜色,只需调用fillcolor

t.fillcolor("red")

要更改钢笔(或轮廓线)的颜色,只需调用pencolor

t.pencolor("green")

要同时更改两者的颜色,只需调用color

t.color("green", "red")

其中,第一个颜色参数是画笔的颜色,第二个颜色参数是指填充的颜色。注意,改变钢笔和填充的颜色也会相应地改变屏幕上乌龟的颜色。

Filling in an Image

给图像上色通常会使它看起来更好看。Python海龟库为大家提供了绘图填充颜色的功能。试着输入下面的代码,看看会发生什么:

t.begin_fill()
t.fd(100)
t.lt(120)
t.fd(100)
t.lt(120)
t.fd(100)
t.end_fill()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

fill

当您使用t.begin_fill()时,你是在告诉计算机程序,你将绘制一个需要填充的封闭形状。然后,使用t.end_fill()表示你已经完成了形状的创建,然后告诉计算机你可以填充它了。

Changing the Turtle Shape

Trutle最初的形状并不是真正的乌龟,而是一个类似于鼠标箭头的三角形图形。但是,我们可以简单的指令来改变海龟的外观:

t.shape("turtle")
t.shape("arrow")
t.shape("circle")
  • 1
  • 2
  • 3

shape

除此之外,还支持正方形square、三角形triangle以及默认格式classic

Changing the Pen Speed

海龟通常以常规的速度移动。当我们想减少或增加速度以使海龟移动得更慢或更快,那么便可以通过输入以下命令来实现:

t.speed(1)
t.forward(100)
t.speed(10)
t.forward(100)
  • 1
  • 2
  • 3
  • 4

这段代码会先降低速度,让乌龟向前移动,然后提高速度,让乌龟再次向前移动,如下所示:

speed

速度可以是从0(最慢的速度)到10(最高的速度)的任何数字。你可以操纵你的代码,看看乌龟会走多快或多慢。

Customizing in One Line

假设你想设置海龟的特征如下:

>>> t.pencolor("purple")
>>> t.fillcolor("orange")
>>> t.pensize(10)
>>> t.speed(9)
>>> t.begin_fill()
>>> t.circle(90)
>>> t.end_fill()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

很长,但也没那么糟糕,对吧?现在,想象一下如果你有10只不同的乌龟。改变他们所有的特征对你来说是非常无聊的!好消息是,这些操作我们可以集成在一条指令,就像这样:

>>> t.pen(pencolor="purple", fillcolor="orange", pensize=10, speed=9)
>>> t.begin_fill()
>>> t.circle(90)
>>> t.end_fill()
  • 1
  • 2
  • 3
  • 4

One Line

这一行代码改变了整支笔,而不需要单独改变每一个特征。要了解关于该命令的更多信息,请查看Python-turtle库官方文档。非常棒!现在,你已经学会了如何自定义你的海龟和屏幕,看看在使用Python海龟库绘图时需要的其他一些重要命令。

Picking the Pen Up and Down

有时,你可能希望将你的海龟移动到屏幕上的另一个点,而不在屏幕上连续画任何东西。为此,我们可以使用penup()。然后,当你想再次开始绘图时,可以使用pendown()。现在,让我们尝试使用你之前用来画正方形的代码来尝试一下:

>>> t.fd(100)
>>> t.rt(90)
>>> t.penup()
>>> t.fd(100)
>>> t.rt(90)
>>> t.pendown()
>>> t.fd(100)
>>> t.rt(90)
>>> t.penup()
>>> t.fd(100)
>>> t.pendown()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

two parallel lines

在这里,通过在原始程序之间添加一些额外的命令,我们获得了两条平行线而不是一个正方形。

Undoing Changes

无论你多么小心,总是有可能犯错误。不过,别担心~~~海龟库为您提供了撤销所做操作的选项。如果你想撤销你所做的最后一件事,那么输入这条命令t.undo()即可。
这条命令的作用是将你运行的最后一个命令撤消。假如你想撤消最后N个命令,那么需要输入对应的Nt.undo()命令。

Clearing the Screen

现在,从开始学习本教程以来,你的屏幕上可能有很多内容。为了腾出更多的空间,只需输入以下命令t.clear(),将会清理当前的屏幕,以便我们可以继续绘图。注意,这里的变量不会被改变,海龟将保持在相同的位置。如果你的屏幕上有其他海龟而不是原来的海龟,那么它们的图画将不会被清除,除非你在代码中特别调用它们。

Resetting the Environment

当然,我们也可以选择使用重置命令reset()重新开始。届时屏幕将被清除,海龟的设置将全部恢复到默认参数。


现在我们已经学习了使用Python turtle库进行编程的基础知识,接下来将了解在编程时可能会用到的一些附加特性。

Leaving a Stamp

你可以选择在屏幕上留下海龟的印记,这只是海龟的印记。试着输入这段代码,看看它是如何工作的:

>>> t.stamp()
8
>>> t.fd(100)
>>> t.stamp()
9
>>> t.fd(100)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

stamp

出现的数字是海龟的位置或Stamp ID。现在,如果你想删除一个特定的戳,只需使用该方法t.clearstamp(8)即可。

Cloning Your Turtle

有时,我们可能需要在屏幕上有多个海龟:

>>> c = t.clone()
>>> t.color("magenta")
>>> c.color("red")
>>> t.circle(100)
>>> c.circle(60)
  • 1
  • 2
  • 3
  • 4
  • 5

cloning

Awesome!现在你已经了解了Python turtle库中的一些重要命令,可以继续学习更多需要理解的概念了。

The Python Turtle Race

到目前为止,我们已经学习了如何自定义海龟环境,并且通过命令使海龟在屏幕上移动以及一些附加属性。现在是进行编程过程中最重要的部分的时候了。在本节中,您将通过创建一个可以与朋友一起玩的有趣游戏,将你在本文中所学到的所有内容实现到一个程序中。

在我们正式开始之前,以下是关于你需要了解到的这款游戏中的内容:

目标
看谁跑得快

玩法

  • 每个玩家掷骰子得到一个数字;
  • 海龟移动数字相应的步数;
  • 玩家交替回合,直至其中一人先到达终点则算获胜。

结构

  • 屏幕中存在两只不同颜色的乌龟,代表两个不同的玩家;
  • 每只乌龟都设置相同的终点;
  • 每个玩家使用骰子为自己的回合随机选择一个值,用1到6的数字列表表示。

OK! 了解完游戏规则后,让我们正式开始!首先,我们需要设置环境。

Setting Up the Game Environment

首先导入Python海龟库。其次,让我们导入Python内置的随机库,它可以帮助我们从列表中随机选择一个数字:

>>> import turtle
>>> import random
  • 1
  • 2

一旦这些库被成功调用到你的环境中没有抛出任何的异常,您就可以继续处理程序的其余部分。

Setting Up the Turtles and Homes

现在让我们来创建两个代表玩家的海龟。每个海龟都有不同的颜色,对应不同的玩家。这里我们设置路人甲的海龟为绿色,路人乙的海龟为蓝色

>>> player_one = turtle.Turtle()
>>> player_one.color("green")
>>> player_one.shape("turtle")
>>> player_one.penup()
>>> player_one.goto(-200,100)
>>> player_two = player_one.clone()
>>> player_two.color("blue")
>>> player_two.penup()
>>> player_two.goto(-200,-100)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

当我们创建完海龟之后,需要确保两只龟龟的起始位置相同。现在,让我们一起为这两只海龟建立一个家,这个家将成为每只海龟的归(终)宿(点)。这里,我们用圆圈来表示每只海龟的家:

>>> player_one.goto(300,60)
>>> player_one.pendown()
>>> player_one.circle(40)
>>> player_one.penup()
>>> player_one.goto(-200,100)
>>> player_two.goto(300,-140)
>>> player_two.pendown()
>>> player_two.circle(40)
>>> player_two.penup()
>>> player_two.goto(-200,-100)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

绘制完各自的家园后,将海龟送回它们的起始位置,如图所示:

Home

太棒了!目前为止游戏的视觉元素已经完成,现在我们可以继续创建用来玩游戏的骰子。

Creating the Die

我们可以用列表为游戏创建一个虚拟骰子,这是一个有序的序列。在现实生活中,你可能会准备购物清单和待办事项清单来帮助你保持条理。在Python中,列表以类似的方式工作。

在这种情况下,我们将使用一个列表来创建骰子。首先,按照从16的升序定义数字列表。你可以定义一个列表,给它一个名(变)字(量),然后把它的item用方括号括起来,如下所示:

>>> die = [1,2,3,4,5,6]
  • 1

现在,让我们开始掷骰子吧!

Developing the Game

是时候为剩下的游戏内容开发代码了。这里我们将使用循环和条件语句,初学者需要小心缩进和空格。首先,让我们先梳理下程序运行游戏所需的步骤:

Step1 首先告诉程序检查是否有一只海龟抵达终点;

Step2 如果没有,那么我们将告诉计算机程序允许玩家继续游戏;

Step3 在每个循环中,我们将告诉程序从列表中随机选择一个数字来掷骰子。

Step4 然后根据随机选择的结果将海龟移动相应的距离。

程序不断重复这个过程,一旦其中一只乌龟达到目标,程序就会停止:

>>> for i in range(20):
...     if player_one.pos() >= (300,100):
...             print("Player One Wins!")
...             break
...     elif player_two.pos() >= (300,-100):
...             print("Player Two Wins!")
...             break
...     else:
...             player_one_turn = input("Press 'Enter' to roll the die ")
...             die_outcome = random.choice(die)
...             print("The result of the die roll is: ")
...             print(die_outcome)
...             print("The number of steps will be: ")
...             print(20*die_outcome)
...             player_one.fd(20*die_outcome)
...             player_two_turn = input("Press 'Enter' to roll the die ")
...             die_outcome = random.choice(die)
...             print("The result of the die roll is: ")
...             print(die_outcome)
...             print("The number of steps will be: ")
...             print(20*die_outcome)
...             player_two.fd(20*die_outcome)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

最终输出看起来会像这样子:

Race

好了,到这里我们已经尝试开发了一个非常简单的小游戏。当然,如果你熟悉更多的Python语法,你可以为该项目添加更多有趣的东西,例如添加更多的海龟,改变颜色,改变速度,甚至创造一些障碍来挑战玩家。这完全取决于身为游戏开发者的你!

Conclusion

在本教程中,我们学习了如何使用Python turtle库进行编程,并掌握了一些非常重要的编程概念。您知道如何处理变量初始化、循环、条件语句、缩进、列表和操作符。这对你来说是一个很好的开始,特别是对于初学者来说!

学完本节课程,你掌握了以下知识点:

  • 设置Python 海龟库
  • 移动海龟
  • 配置海龟及其相应的环境
  • 对海龟进行编程
  • 使用基础的编程概念
  • 创建一个可以和你朋友一起玩的小游戏

现在,如果你已经准备好进入一些更高级的Python编程。要在你的Python之旅中取得进一步的进展,请继续跟随Pytrick的步伐。只要记住努力学习并坚持练习,你渐渐就会发现你很快就会成为一名Pythoner!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/116981?site
推荐阅读
相关标签
  

闽ICP备14008679号