python萌新必看的海龟画图讲解

目录

  • 1. 初探海龟绘图
  • 1.1 了解海龟绘图的坐标系1.2 海龟绘图的三要素1.3 绘制第一只海龟

最近博主在 CSDN 上看到许多关于海龟画图的案例,如画圣诞树、五角星等,但是都是直接给出了源码以及一些简单的注释,没有对其详细的说明,会让很多初学者迷糊很久,故这里博主详细地对 turtle 模块中的方法进行详解,让广大博友能够做到自由画图。

海龟绘图是 Python 内置的一个比较有趣的模块,模块名称为 turtle。它最初源于 20世纪60年代 的 Logo 语言,之后成为了 Python 的内置模块。海龟绘图提供了一些简单的绘图方法,可以根据编写的控制指令(代码),让一个 “海龟” 在屏幕上来回移动,而且可以在它爬行的路径上绘制图形。通过海龟绘图,不仅可以在屏幕上绘制图形,还可以看到整个绘制过程。另外,海龟绘图对初学者十分友好,它能够轻松地编写出很多有趣的实例。

1. 初探海龟绘图

海龟绘图是 Python 内置的模块,在使用前需要导入该模块,可以使用以下几种方法导入:

1.1 了解海龟绘图的坐标系

在学习海龟绘图之前,需要先了解海龟绘图的坐标系。海龟绘图采用的是平面坐标系,即画布(窗口)的中心为原点(0,0),横向为 x 轴,纵向为 y 轴,x 轴控制水平位置,y 轴控制垂直位置。例如,一个 400×320 的画布,对应的坐标系如下图所示。

在上图中,绿色虚线框为画布大小。海龟活动的空间为绿色虚线框以内。即 x 轴的移动区间为 -200~200,y 轴的移动区间为 -160~160。同数学中一样,表示海龟所在位置(即某一点)的坐标为 (x, y)。

1.2 海龟绘图的三要素

采用海龟绘图有三个关键要素,即方向、位置和画笔。在进行海龟绘图时,主要就是控制这些要素来绘出我们想要的图形。下面分别进行介绍。

  1. 方向 在进行海龟绘图时,方向主要用于控制海龟的移动方向。主要有以下 3 个方法进行设置left()/lt() 方法:让海龟左转 (逆时针) 指定度数。right()/rt() 方法:让海龟右转 (顺时针) 指定度数。setheading()/seth() 方法:设置海龟的朝向为0(东)、90(北)、180(西)或 270(南)。
  2. 位置 在进行海龟绘图时,位置主要用于控制海龟移动的距离。主要有以下 6 个方法进行设置:forward(distance):让海龟向前移动指定距离,参数 distance 为有效数值。backward(distance):让海龟向后退指定距离,参数 distance 为有效数值。goto(x,y):让海龟移动到画布中的特定位置。即坐标 (x,y) 所指定的位置。setx(x):设置海龟的横坐标到 ,纵坐标不变。sety(y):设置海龟的纵坐标到 ,横坐标不变。home():海龟移至初始坐标(0,0),并设置朝向为初始方向。
  3. 画笔 海龟绘图中的画笔就相当于现实生活中绘图所用的画笔。在海龟绘图中,通过画笔可以控制线条的粗细、颜色和运动的速度。关于画笔的详细介绍请看后续。

1.3 绘制第一只海龟

程序运行结果如下:

多说一句,很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

圣诞节快到了,用python、turtle画棵圣诞树吧

首先需要安装python环境,如果是新手建议百度一下,有很详细的教程哦,根据电脑的情况去下载对应的python安装包,使用的是python3.7.0的版本,除此之外还有python2 ,和python3是有区别的,但是本人对python2的了解不够深。

安装完环境后,建议大家安装一个python编译器,使用的是pycharm,免费版本的,网上也都有安装教程,挺简单的,而且官方出了汉化插件,可以在file-setting中搜索安装。

编译器也安装完毕后,请打开pycharm,然后我们创建一个project,在project下创建一个python file,建议取名字不要使用中文,创建成功后把代码复制过去,然后在该页面右键-运行(run),按理就可以跑了。

import turtle as t #as就是取个别名,后续调用的t都是turtle

from turtle import *

import random as r

import time

n = 100.0

speed(\”fastest\”) #定义速度

screensize(bg=\’black\’) #定义背景颜色,可以自己换颜色

left(90)

forward(3*n)

color(\”orange\”, \”yellow\”)#定义最上端星星的颜色,外圈是orange,内部是yellow

begin_fill()

left(126)

for i in range(5): #画五角星

forward(n/5)

right(144) #五角星的角度

forward(n/5)

left(72) #继续换角度

end_fill()

right(126)

def drawlight():#定义画彩灯的方法

if r.randint(0, 30) == 0:#如果觉得彩灯太多,可以把取值范围加大一些,对应的灯就会少一些

color(\’tomato\’)#定义第一种颜色

circle(6)#定义彩灯大小

elif r.randint(0,30) == 1:

color(\’orange\’)#定义第二种颜色

circle(3)#定义彩灯大小

else:

color(\’dark green\’)#其余的随机数情况下画空的树枝

color(\”dark green\”)#定义树枝的颜色

backward(n*4.8)

def tree(d, s):#开始画树

if d <= 0: return

forward(s)

tree(d-1, s*.8)

right(120)

tree(d-3, s*.5)

drawlight()#同时调用小彩灯的方法

right(120)

tree(d-3, s*.5)

right(120)

backward(s)

tree(15, n)

backward(n/2)

for i in range(200):#循环画最底端的小装饰

a = 200 – 400 * r.random()

b = 10 – 20 * r.random()

up()

forward(b)

left(90)

forward(a)

down()

if r.randint(0, 1) == 0:

color(\’tomato\’)

else:

color(\’wheat\’)

circle(2)

up()

backward(a)

right(90)

backward(b)

t.color(\”dark red\”,\”red\”)#定义字体颜色

t.write(\”Merry Christmas\”,align =\”center\”,font=(\”Comic Sans MS\”,40,\”bold\”))#定义文字、位置、字体、大小

def drawsnow():#定义画雪花的方法

t.ht() #隐藏笔头,ht=hideturtle

t.pensize(2) #定义笔头大小

for i in range(200): #画多少雪花

t.pencolor(\”white\”) #定义画笔颜色为白色,其实就是雪花为白色

t.pu() #提笔,pu=penup

t.setx(r.randint(-350,350)) #定义x坐标,随机从-350到350之间选择

t.sety(r.randint(-100,350)) #定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始

t.pd() #落笔,pd=pendown

dens = 6 #雪花瓣数设为6

snowsize = r.randint(1,10) #定义雪花大小

for j in range(dens): #就是6,那就是画5次,也就是一个雪花五角星

#t.forward(int(snowsize)) #int()取整数

t.fd(int(snowsize))

t.backward(int(snowsize))

#t.bd(int(snowsize)) #注意没有bd=backward,但有fd=forward,小bug

t.right(int(360/dens)) #转动角度

drawsnow()#调用画雪花的方法

t.done() # 完成,否则会直接关闭

转载:CSDN博主「Ding2langdang」https://blog.csdn.net/Ding2langdang/article/details/121491593

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。