python 二级笔记(一)---Turtle库题型总结

目录

1.Turtle库的简介

2.Turtle的空间坐标体系

3.Turtle与其他函数的结合

4.Turtle绘制多图形结合

5.Turtle与列表的结合

6.Turtle与颜色的填充

7.Turtle绘制较为复杂图形

8.Turtle总结

1.Turtle库的简介

Turtle库,作为Python的标准库之一,通过其直观的海龟绘图体系,成为初学者学习编程的热门选择。在计算机等级考试或编程入门课程中,turtle绘图常被用作简单应用的第一题,旨在通过图形化方式教授基础编程概念,激发学习兴趣,培养编程思维和创造力。​​​​

2.Turtle的空间坐标体系

(1)绝对坐标体系是以计算机屏幕为基准建立的,其中心点被设定为坐标原点(0,0)。利用Python的turtle库,通过调用 turtle.goto(x, y) 方法,可以精确地指挥海龟(即绘图光标)从当前所在位置直接移动到指定的坐标点(x,y)上,从而实现在屏幕上的精确定位与绘图。

(2)另外一种是海龟坐标,是以海龟本身为参考系,默认的初始方向为0度(水平向右)。通过 turtle.left(angle) 和 turtle.right(angle) 来以海龟为参考系改变方向,其中 angle 为角度。其中需要注意的是 right 可以理解为往右也可以理解成顺时针,反之 left 同理。

例题 1 :使用turtle库的turtle. right() 函数和turtle.fd() 函数绘制一个菱形,边长为200像素,4个内角度数为2个60度和2个120度,效果如图所示。

该题给出的初始代码为:

# 请在______处使用一行代码或表达式替换
# 注意:请不要修改其他已给出代码

import turtle
turtle.right(-30)
___(1)___
turtle.right(60)
turtle.fd(200)
___(2)___
turtle.fd(200)
turtle.right(60)
turtle.fd(200)
turtle.right(120)

从题目给出的初始代码可知,这道题考察的是海龟坐标体系,是以海龟本身为参考系进行方向判断。在海龟坐标中,默认的初始方向为0度(水平向右)。修改后的代码如下:

# 请在______处使用一行代码或表达式替换
# 注意:请不要修改其他已给出代码

import turtle
turtle.right(-30)
turtle.fd(200)
turtle.right(60)
turtle.fd(200)
turtle.right(120)
turtle.fd(200)
turtle.right(60)
turtle.fd(200)
turtle.right(120)

3.Turtle与其他函数的结合

我们在使用turtle绘图的时候,for循环是一个极其有用的工具,它可以帮助我们缩减重复的代码步骤,使绘图过程更加简洁和高效。通过结合range函数,我们可以控制循环的次数,从而精确地控制turtle的移动、旋转或其他绘图操作。

例题 2:使用turtle库的turtle.fd()函数和turtle.seth()函数绘制一个每方向为100像素长度的十字形,效果如图所示。

 该题给出的初始代码为:

# 请在______处使用一行代码或表达式替换
# 注意:请不要修改其他已给出代码

import turtle
for i in range(4):
    turtle.fd(100)
    ___(1)___(-100)
    ___(2)___((i+1)*90)

从题目给出的初始代码可知,这道题考察的是与range函数的结合。其中 i 的取值分别为0,1,2,3。因此旋转的角度分别为90,180,270,360。其中我们需要注意的是 turtle.seth() 使用的是绝对角度。修改后的代码如下: 

# 请在______处使用一行代码或表达式替换
# 注意:请不要修改其他已给出代码

import turtle
for i in range(4):
    turtle.fd(100)
    turtle.fd(-100)
    turtle.seth((i+1)*90)

当然如果我们不考虑题目提供的代码 ,我们还可以把代码修改为:(但是考试的时候不能替换原始代码)

# 请在______处使用一行代码或表达式替换
# 注意:请不要修改其他已给出代码

import turtle
d = 0
for i in range(4):
    turtle.fd(100)
    turtle.fd(-100)
    d+=90
    turtle.seth(d)

4.Turtle绘制多图形结合

我们在使用turtle绘图的时候,有时候在绘制复杂图形的时候需要绘制2个或2个以上的图形,这也是计算机二级中常考的题型。

 例题 3:使用turtle库的turtle.fd(函数和turtle.left()函数绘制一个边长为200像素的正方形及一个紧挨四个顶点的圆形。效果如下图所示。

 该题给出的初始代码为:

'''
在横线处补充代码,不得修改其它代码
'''

import turtle
turtle.pensize(2)
for i in range(_______(1)_________):
    turtle.fd(200)
    turtle.left(90)
turtle.left(_______(2)_________)
turtle.circle(_______(3)_________*pow(2,0.5))

从题目给出的初始代码可知,这道题先绘制正方形然后再绘制圆形。需要注意的是,turtle.circle()在绘制圆形的时候,默认方向是朝向x轴正方向。因此修改后的代码如下:

'''
在横线处补充代码,不得修改其它代码
'''

import turtle
turtle.pensize(2)
for i in range(4):
    turtle.fd(200)
    turtle.left(90)
turtle.left(-45)
turtle.circle(100*pow(2,0.5))

5.Turtle与列表的结合

Turtle(海龟绘图)与列表(List)的结合是Python编程中一个非常有趣且强大的组合。Turtle图形库提供了绘制各种图形的简单方法,而列表作为一种数据结构,能够存储和管理一系列的元素。通过将Turtle绘图与列表相结合,可以创建更加复杂和动态的图形效果。 

例题4:根据列表中保存的数据采用turtle库画图直方图,显示输出在屏幕上,效果如下图所示。ls=[69, 292. 33,131.61.254]

该题给出的初始代码为:

# 在____________上补充代码
# 请不要修改其他代码

____________
ls = [69, 292, 33, 131, 61, 254]
X_len = 400
Y_len = 300
x0 = -200
y0 = -100

t.penup()
t.goto(x0, y0)
t.pendown()

t.fd(X_len)
t.fd(-X_len)
t.seth(____________)
t.fd(Y_len)

t.pencolor('red')
t.pensize(5)
for i in range(len(ls)):
    t.____________
    t.goto(x0 + (i+1)*50, ____________)
    t.seth(90)
    t.pendown()
    t.fd(____________)
t.done()
               

从题目给出的初始代码可知,这道题我们需要利用海龟绘制一张直方图,而直方图的数据在列表之中。修改后的代码如下:

# 在____________上补充代码
# 请不要修改其他代码

import turtle as t #更简洁地调用turtle库
# 定义一个列表ls,包含了一系列的数字,这些数字将作为后续绘制直线段的长度 
ls = [69, 292, 33, 131, 61, 254]
X_len = 400    # 画布在X轴上的长度 
Y_len = 300    # 画布在Y轴上的长度 
#初始位置
x0 = -200
y0 = -100

# 抬起画笔,移动到初始位置(x0, y0),然后放下画笔 
t.penup()
t.goto(x0, y0)
t.pendown()

# 绘制一个水平的参考线,从(x0, y0)到(x0 + X_len, y0) 
t.fd(X_len)
t.fd(-X_len)
t.seth(90) #设置笔的起始角度
t.fd(Y_len)

t.pencolor('red')
t.pensize(5)
for i in range(len(ls)):
    t.penup()             #提起画笔
    t.goto(x0 + (i+1)*50, y0) #移到绝对坐标处,这里x坐标动,y坐标不动
    t.seth(90)
    t.pendown()           #放下画笔
    t.fd(ls[i])   #表示直线爬行的距离
t.done()

6.Turtle与颜色的填充

在Turtle图形库中, turtle.color()函数用于设置画笔的颜色。这个函数可以接受一个参数或两个参数,具体取决于你想要如何设置颜色。

单参数模式:当你只传递一个参数给 turtle.color() 时,这个参数应该是一个颜色字符串或者是一个颜色代码。这个颜色将同时应用于画笔的填充色和线条色。 

 双参数模式:你也可以传递两个参数给 turtle.color(),第一个参数是线条色 (pen color),第二个参数是填充色 (fill color)。这样,你就可以分别设置线条和填充区域的颜色了。

例题5:使用turtle库,在屏幕上绘制正方形及其内接圆形。其中,正方形左下角坐标为(0,0),边长为黑色,长度200像素,线宽1像素,内切圆为绿色,线宽5像素,内部以红色填充。示例如下:

 该题给出的初始代码为:

# 请在______处补充一行代码
# 请不要修改其他代码

import turtle as t
for i in range(4):
    (1) _____________________
    t.left(90)
t.penup()
(2)___________________
t.pendown()
(3)___________________
t.pensize(5)
t.begin_fill()
(4)_________________
(5)_________________
t.done()

从题目给出的初始代码可知,这道题先绘制正方形再绘制圆形,最后对圆形进行填充。修改后的代码如下:

# 请在______处补充一行代码
# 请不要修改其他代码

import turtle as t
for i in range(4):
    t.forward(200) # 向前移动200个距离单位
    t.left(90)
t.penup()
t.goto(100, 0) # 向前移动100个距离单位,该处为正方形内切圆的切点。
t.pendown()
t.color('green', 'red') # 根据题目设置前景色(线条色)和背景色(填充色)
t.pensize(5)
t.begin_fill()
t.circle(100) # 绘制圆形。
t.end_fill() # 结束填充。
t.done()

7.Turtle绘制较为复杂图形

我们在绘制复杂图形时,通常需要编写更长的代码,其中包含多个循环、条件语句以及可能的函数调用来组织代码结构。例如,绘制一个分形图案(如雪花、科赫曲线等)或是一个复杂的螺旋结构,就需要精确控制海龟的移动路径和绘制顺序。此外,还可以利用颜色变化、线宽调整以及填充效果来增强图形的视觉效果。 

例题6 :利用random库和turtle库,在屏幕上绘制4个小雪花,雪花的中心点坐标出列表points给出,雪花的半径长度由randint()函数产生。雪花的颜色是红色,效果如下图所示 。

 该题给出的初始代码为:

# 请在______处使用一行代码或表达式替换
# 注意:请不要修改其他已给出代码

import turtle as t
import random as r

r.seed(1)
t.pensize(2)
t.____________('red')
angles = 6
points= [[0,0],[50,40],[70,80],[-40,30]]

for i in range(____________):
    x0,y0 = points[i]
    t.penup()
    t.goto(____________)
    t.pendown()

    length = r.randint(6, 16)
    for j in range(angles):
        t.____________(length)
        t.____________(length)
        t.right(360 / angles)
t.done()

  从题目给出的初始代码可知,我们需要绘制4个雪花一样的图形。修改后的代码如下:

# 请在______处使用一行代码或表达式替换
# 注意:请不要修改其他已给出代码

import turtle as t
import random as r

r.seed(1)
t.pensize(2)
t.pencolor('red')  #设置笔的颜色
angles = 6
points= [[0,0],[50,40],[70,80],[-40,30]]

for i in range(len(points)): 
    x0,y0 = points[i]
    t.penup()      #提起画笔,与pendown配对使用
    t.goto(x0,y0)  #移到绝对坐标处
    t.pendown()    #放下画笔

    length = r.randint(6, 16)
    for j in range(angles):
        t.forward(length)  #沿着当前方向前面指定距离
        t.backward(length) #沿着当前相反方向前进指定距离
        t.right(360 / angles)
t.done()

8.Turtle总结

Turtle库是Python的一个强大而直观的图形绘制库,通过控制“海龟”在屏幕上的移动和绘图,实现各种图形和图案的绘制。它适合初学者学习编程逻辑和图形界面设计,简单有趣,是Python编程教学中的经典工具。

最后,转载于https://blog.csdn.net/July__July/article/details/99543992,为大家提供一个有趣的皮卡丘绘制方法。

# coding:utf-8
import turtle as t
import time
# 皮卡丘
# 基础设置
t.screensize(800, 600)
t.pensize(2)  # 设置画笔的大小
t.speed(10)  # 设置画笔速度为10
# 画左偏曲线函数
def radian_left(ang, dis, step, n):
    for i in range(n):
        dis += step  # dis增大step
        t.lt(ang)  # 向左转ang度
        t.fd(dis)  # 向前走dis的步长
def radian_right(ang, dis, step, n):
    for i in range(n):
        dis += step
        t.rt(ang)  # 向左转ang度
        t.fd(dis)  # 向前走dis的步长
# 画耳朵
def InitEars():
    t.color("black", "yellow")
    # 左耳朵曲线
    t.pu()  # 提笔
    t.goto(-50, 100)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(110)  # 画笔角度
    t.begin_fill()
    radian_left(1.2, 0.4, 0.1, 40)
    t.setheading(270)  # 画笔角度
    radian_left(1.2, 0.4, 0.1, 40)
    t.setheading(44)  # 画笔角度
    t.forward(32)
    t.end_fill()
    # 右耳朵曲线
    t.pu()  # 提笔
    t.goto(50, 100)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(70)  # 画笔角度
    t.begin_fill()
    radian_right(1.2, 0.4, 0.1, 40)
    t.setheading(270)  # 画笔角度
    radian_right(1.2, 0.4, 0.1, 40)
    t.setheading(136)  # 画笔角度
    t.forward(32)
    t.end_fill()
    # 耳朵黑
    t.begin_fill()
    t.fillcolor("black")
    t.pu()  # 提笔
    t.goto(88, 141)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(35)  # 画笔角度
    radian_right(1.2, 1.6, 0.1, 16)
    t.setheading(270)  # 画笔角度
    radian_right(1.2, 0.4, 0.1, 25)
    t.setheading(132)  # 画笔角度
    t.forward(31)
    t.end_fill()
    t.begin_fill()
    t.fillcolor("black")
    t.pu()  # 提笔
    t.goto(-88, 141)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(145)  # 画笔角度
    radian_left(1.2, 1.6, 0.1, 16)
    t.setheading(270)  # 画笔角度
    radian_left(1.2, 0.4, 0.1, 25)
    t.setheading(48)  # 画笔角度
    t.forward(31)
    t.end_fill()
# 画尾巴
def InitTail():
    # 尾巴
    t.begin_fill()
    t.fillcolor("yellow")
    t.pu()  # 提笔
    t.goto(64, -140)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(10)  # 画笔角度
    t.forward(20)
    t.setheading(90)  # 画笔角度
    t.forward(20)
    t.setheading(10)  # 画笔角度
    t.forward(10)
    t.setheading(80)  # 画笔角度
    t.forward(100)
    t.setheading(35)  # 画笔角度
    t.forward(80)
    t.setheading(260)  # 画笔角度
    t.forward(100)
    t.setheading(205)  # 画笔角度
    t.forward(40)
    t.setheading(260)  # 画笔角度
    t.forward(37)
    t.setheading(205)  # 画笔角度
    t.forward(20)
    t.setheading(260)  # 画笔角度
    t.forward(25)
    t.setheading(175)  # 画笔角度
    t.forward(30)
    t.setheading(100)  # 画笔角度
    t.forward(13)
    t.end_fill()
# 画脚
def InitFoots():
    # 脚
    t.begin_fill()
    t.fillcolor("yellow")
    t.pensize(2)
    t.pu()  # 提笔
    t.goto(-70, -200)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(225)  # 画笔角度
    radian_left(0.5, 1.2, 0, 12)
    radian_left(35, 0.6, 0, 4)
    radian_left(1, 1.2, 0, 18)
    t.setheading(160)  # 画笔角度
    t.forward(13)
    t.end_fill()
    t.begin_fill()
    t.fillcolor("yellow")
    t.pensize(2)
    t.pu()  # 提笔
    t.goto(70, -200)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(315)  # 画笔角度
    radian_right(0.5, 1.2, 0, 12)
    radian_right(35, 0.6, 0, 4)
    radian_right(1, 1.2, 0, 18)
    t.setheading(20)  # 画笔角度
    t.forward(13)
    t.end_fill()
# 画身体
def InitBody():
    # 外形轮廓
    t.begin_fill()
    t.pu()  # 提笔
    t.goto(112, 0)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(90)  # 画笔角度
    t.circle(112, 180)
    t.setheading(250)  # 画笔角度
    radian_left(1.6, 1.3, 0, 50)
    radian_left(0.8, 1.5, 0, 25)
    t.setheading(255)  # 画笔角度
    radian_left(0.4, 1.6, 0.2, 27)
    radian_left(2.8, 1, 0, 45)
    radian_right(0.9, 1.4, 0, 31)
    t.setheading(355)  # 画笔角度
    radian_right(0.9, 1.4, 0, 31)
    radian_left(2.8, 1, 0, 45)
    radian_left(0.4, 7.2, -0.2, 27)
    t.setheading(10)  # 画笔角度
    radian_left(0.8, 1.5, 0, 25)
    radian_left(1.6, 1.3, 0, 50)
    t.end_fill()
def InitEyes():
    # 左眼睛
    t.begin_fill()
    t.fillcolor("black")
    t.pu()  # 提笔
    t.goto(-46, 10)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(90)  # 画笔角度
    t.circle(5, 360)
    t.end_fill()
    # 右眼睛
    t.begin_fill()
    t.fillcolor("black")
    t.pu()  # 提笔
    t.goto(46, 10)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(-90)  # 画笔角度
    t.circle(5, 360)
    t.end_fill()
# 画脸
def InitFace():
    # 脸蛋
    t.begin_fill()
    t.fillcolor("red")
    t.pu()  # 提笔
    t.goto(-63, -10)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(90)  # 画笔角度
    t.circle(10, 360)
    t.end_fill()
    t.begin_fill()
    t.fillcolor("red")
    t.pu()  # 提笔
    t.goto(63, -10)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(-90)  # 画笔角度
    t.circle(10, 360)
    t.end_fill()
    # 嘴巴
    t.pensize(2.2)
    t.pu()  # 提笔
    t.goto(0, 0)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(235)  # 画笔角度
    radian_right(5, 0.8, 0, 30)
    t.pu()  # 提笔
    t.goto(0, 0)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(305)  # 画笔角度
    radian_left(5, 0.8, 0, 30)
# 画手
def InitHands():
    # 左手
    t.pensize(2)
    t.pu()  # 提笔
    t.goto(-46, -100)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(285)  # 画笔角度
    radian_right(0.4, 1.2, 0, 26)
    radian_right(5, 0.35, 0, 26)
    radian_right(0.3, 1.2, 0, 15)
    # 右手
    t.pu()  # 提笔
    t.goto(46, -100)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(255)  # 画笔角度
    radian_left(0.4, 1.2, 0, 26)
    radian_left(5, 0.35, 0, 26)
    radian_left(0.3, 1.2, 0, 15)
def CloseEyes():
    # 左眼睛
    t.pu()  # 提笔
    t.goto(-46, 12)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(180)  # 画笔角度
    t.forward(10)
    # 右眼睛
    t.pu()  # 提笔
    t.goto(46, 12)  # 笔头初始位置
    t.pd()  # 下笔
    t.setheading(0)  # 画笔角度
    t.forward(10)
# 初始化
def Init():
    InitEars()
    InitTail()
    InitFoots()
    InitBody()
    InitFace()
    InitHands()
    InitEyes()
# 眨眼睛
def Upgarde():
    InitEars()
    InitTail()
    InitFoots()
    InitBody()
    InitFace()
    InitHands()
    CloseEyes()
def Upgarde_Init():
    InitEars()
    InitTail()
    InitFoots()
    InitBody()
    InitFace()
    InitHands()
    InitEyes()
def main():
    Init()
    t.tracer(False)
    # 眨眼睛动画
    for i in range(30):
        if i % 2 == 0:
            t.reset()
            t.hideturtle()
            Upgarde()
            t.update()
            time.sleep(0.3)
        else:
            t.reset()
            t.hideturtle()
            Upgarde_Init()
            t.update()
            time.sleep(1)
main()
# 结束画笔
t.done()

祝大家顺利通过计算机二级考试!

  • 18
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值