Python海龟画图简易例子教程


例子1: 画一根直线

最简单的就是用海龟画一根直线,下而几个步骤:

  1. 导入海龟模块,这是不可缺少的一步。
  2. 新建一只海龟,给它取个名字,比如叫tom,这个时候窗口会自动出现。
  3. 用海龟画画或做些其它的事情,比如设定海龟的颜色.
  4. 最后一行运行 turtle.done(). (而不是 tom.done()!)

turtle.done()一定要放在程序的最后面,这行代码有时候也可以省略。

代码如下:

# 第一步:导入海龟模块
import turtle

# 第二步:创建海龟,取名为tom
tom = turtle.Turtle()

# 第三步:朝海龟的方向移动50个像素(一个像素就是屏幕上最小的一个颜点)
tom.forward(50)

# 第四步:完成!
turtle.done()

输出:

相关知识:

其实只要两行代码即可让海龟画一条直线,请输入import   turtle ,然后输入 turtle.forward(100),看下是不是画了一条长度为100像素的直线呢?这并不是不需要创建海龟,而是自动创建了一只也叫turtle的海龟!


例子2: 画一个正方形

画根线条是不是很无聊啊,我们让海龟旋转,然后画一个更有趣的图形。

代码如下:

import turtle

xixi = turtle.Turtle()

xixi.forward(50)   # 前进50个像素
xixi.right(90)     # 顺时钟旋转90度

xixi.forward(50)
xixi.right(90)

xixi.forward(50)
xixi.right(90)

xixi.forward(50)
xixi.right(90)

turtle.done()

输出:

相关知识:

backward命令能让海龟倒退,如xixi.backward(100)。可以让海龟倒退100个单位。left命令能让海龟向左旋转,如xixi.left(135)这条命令能让名叫xixi的海龟反时钟旋转135度。

练习:只用backward和left命令画一个正方形。.


例子3: 用循环控制结构画一个正方形

上面的海龟只是简单的重复了前进和右转命令4次。如果能让一些代码不断地重复执行有多好!Python有个叫for的控制结构能让一些代码重复执行,我们把它叫for循环。

代码如下:

import turtle 

mm = turtle.Turtle()

# 下面是重复4次的for循环
# 注意缩进
for i in range(4):
    mm.forward(50)
    mm.right(90)
    
# 下面这一行代码放在最后,不需要重复执行
turtle.done()

输出:

相关知识:

运行下面的代码,看看有什么输出。

print("start test")

for i in range(4):
    print(i)
    print("test")
    
print("end test 1")

for banana in range(20):
    print(banana)
    print(banana * 2)

例子4: 画五角星

代码如下所示:

import turtle 

star = turtle.Turtle()

for i in range(50):
    star.forward(50)
    star.right(144)
    
turtle.done()

输出:

相关知识:

你知道为什么是旋转144度呢?修改成其它的数字又是一个怎么样的图形?


例子5: 螺旋之星

代码如下所示:

import turtle 

spiral = turtle.Turtle()

for i in range(20):
    spiral.forward(i * 10)
    spiral.right(144)
    
turtle.done()

输出:

相关知识:

注意海龟每次移动的距离不一样,如果是 sprial.forward(i*i),又将会是怎么样的图形?


例子6: 改变线条颜色

代码如下所示:

import turtle 

painter = turtle.Turtle()

painter.pencolor("blue") # 设定画笔颜色

for i in range(50):
    painter.forward(50)
    painter.left(123) #  左转123度
    
painter.pencolor("red")
for i in range(50):
    painter.forward(100)
    painter.left(123)
    
turtle.done()

输出:

相关知识:

Python海龟画图也能接受以#号开头的6个字母做为一种颜色。这6个字母是从0、1、2...9、A到F。

import turtle 

painter2 = turtle.Turtle()

painter2.pencolor("#32D486")
painter2.forward(30)

painter2.pencolor("#D6305F")
painter2.forward(30)

除了画笔颜色,如果要填充一个图形,也可以设置填充颜色,命令是fillcolor。


例子6: 变量

下面的程序是画一个正多边形。在程序中,定义了几个变量,其中angle是计算出来的。如果要画其它的正多边形,比如12条边,那么只要改变num_sides的值即可。它是一个整型变量。用来表示整数。

Code

import turtle 

polygon = turtle.Turtle()

num_sides = 6                          # 边数
side_length = 70                       # 边长
angle = 360.0 / num_sides              # 旋转角度   

for i in range(num_sides):
    polygon.forward(side_length)
    polygon.right(angle)
    
turtle.done()

输出:

相关知识:

在计算机中的等于号叫赋值号,它的用途是赋值,并不是判断两边的数据相等的意思。初学者常常会搞混淆。如 x = 5 在计算机中让赋值号右边的值赋予给左边的变量x的意思,而 x = x + 1的意思是把x+1的值算出来,再赋值给x的意思,所以经过运算,x的值变成了6。看看下面的代码:

my_variable = 3 + 4 
print(my_variable)

my_variable = my_variable + 5
print(my_variable)

…打印输入的结果是7和12。记住,是先计算等于号右边的值,再赋值给左边的变量!


例子7: 嵌套循环

下面的程序会打印7行5列的点阵。dot_distance这个变量表示点的距离。penup命令会让海龟的画笔抬起来,这样海龟移动就不会留下轨迹了。像这样的两层for循环叫嵌套的for循环。里层的for循环完成打印一行圆点,接着倒回去,向下前进,再回到初始方向。不断重复这个过程7次,就把点阵画好了。

代码如下所示:

import turtle 

nana = turtle.Turtle()

dot_distance = 25
width = 5
height = 7

nana .penup()

for y in range(height):
    for i in range(width):
        nana.dot()                            # 打圆点
        nana.forward(dot_distance)            # 前进
    nana.backward(dot_distance * width)       # 倒回来
    nana.right(90)                            # 右转90度 
    nana.forward(dot_distance)                # 前进  
    nana.left(90)                             # 左转90度
    
turtle.done()

输出


例子8: 拐来拐去的图形与速度

海龟的setposition命令能设定坐标,别名是goto或者setpos。如ninja.goto(100,100)能让名为忍者的海龟迅速到达(100,100)这个坐标。如果抬笔了,那么不会留下轨迹。我们可以通过海龟的speed命令设定移动速度,0是最快的,1是最慢的,10也很快,但还是没有把速度设置为0这么快。

代码如下所示:

import turtle 

ninja = turtle.Turtle()

ninja.speed(10)

for i in range(180):
    ninja.forward(100)
    ninja.right(30)
    ninja.forward(20)
    ninja.left(60)
    ninja.forward(50)
    ninja.right(30)
    
    ninja.penup()                  # 抬笔
    ninja.setposition(0, 0)
    ninja.pendown()                # 落笔
    
    ninja.right(2)
    
turtle.done()

输出:


例子9: 颜色列表

我们把一些颜色单词放在一个列表中,取名为colors或者cs,把这个列表叫颜色列表。当需要改变海龟画笔颜色中,可以随机或者按顺序从这个列表中取颜色。下面是一个例子。

代码如下所示:

import turtle 

huahua = turtle.Turtle()
huahua.pensize(4)

cs = ['red','orange','yellow','green','cyan','blue','purple','pink','magenta','gray','brown','lime']

for i in range(180):
    c = cs[ i % len(cs)]
    huahua.color(c)                # 画笔颜色和填充颜色都是c 
    huahua.forward(i)
    huahua.left(6)
    
turtle.done()

输出:


例子10: 颜色增加模块coloradd

为了让所画的图形更加酷炫,我们引入一个第三方模块,它叫颜色增加模块。这个模块里有设置颜色亮度、饱笔度等命令。下面的例子会用到coloradd命令,它能让颜色的色相增加。注意需要把颜色模式设定为255。安装coloradd模块的方法为用cmd打开管理员窗口,然后输入pip install coloradd。如果不知道安装,请联系作者李兴球 406273900@qq.com。

代码如下所示:

import turtle 
from coloradd import coloradd

huahua = turtle.Turtle()

huahua.pensize(40)

screen = huahua.getscreen()
screen.colormode(255)

c = (255,0,0)

for i in range(180):    
    huahua.color(c)                # 画笔颜色和填充颜色都是c 
    huahua.forward(1)
    c = coloradd(c,0.01)           # “色相”增加一点,返回的是三元组
    
turtle.done()

输出:


例子11: 弹球

在下面的程序中,改变了导入海龟模块的方式。我们从海龟模块导入了两个命令,一个是用来实例化海龟的Turtle命令。它实际上是一个类。另一个是新建屏幕的Screen命令。它实际上是一个函数。这个函数运行时会检查当前有没有海龟画图窗口。 如果没有,则新建一个,如果有,则返回这个窗口。 海龟的造型是可以改变的,并且默认的造型名字是classic。还有诸名square、triangle、circle、arrow等造型名字。在下面用Turtle类实例化海龟的时候,直接指定了它的造型为circle,这是圆形。 所以我们能看到一个红色的圆形。这个程序还使用了随机模块,即random模块 的randint命令。这是一个能在某个范围内取整数的命令。 这个程序使用了反弹原理,让小球到了屏幕边缘就会反弹,由于使用的小球中心点坐标做为依据,所以小球会“陷入”边缘大约球的半径的距离。

代码如下所示:

from random import randint
from turtle import Screen,Turtle

screen = Screen()                                 # 新建屏幕
screen.title('弹球')                               # 窗口标题
screen.setup(480,360)                             # 窗口大小

ball = Turtle(shape='circle')                     # 实例化造型为circle的海龟对象
ball.penup()
ball.speed(0)
ball.color('red')
           
fx = randint(1,360)                               # 在1到360之间随机取一个和数 
ball.setheading(fx)                               # 设置球的初始方向

while True:
    ball.fd(5)                                    # 前进5个单位(forward的缩写形式)
    x = ball.xcor()                               # 获取x的坐标 
    y = ball.ycor()                               # 获取y的坐标
    if abs(x) > 240:                              # 如果x的绝对值大于240
        fx = ball.heading()
        ball.seth(180-fx)
    if abs(y) > 180:                              # 如果y的绝对值大于180
        fx = ball.heading()
        ball.seth(-fx)
    
turtle.done()

返回交作业平台