前言
粉红色系列更新啦,我用python实现了一只kitty猫!
Python的turtle模块是一个基于Python语言的图形库,用于绘制简单的图形、图形动画和游戏等等。它的操作方式与LOGO语言非常相似,因此很容易上手。本文将从以下几个方面为你介绍如何使用turtle模块进行绘图。
NO.1、基本绘图命令
turtle模块的基本绘图命令如下:
turtle.forward(distance) # 向前移动distance个单位长度
turtle.backward(distance) # 向后移动distance个单位长度
turtle.right(angle) # 向右转angle度
turtle.left(angle) # 向左转angle度
turtle.penup() # 抬起画笔
turtle.pendown() # 落下画笔
turtle.goto(x, y) # 移动到坐标(x, y)
turtle.up() # 抬起画笔
turtle.down() # 落下画笔
turtle.color(color) # 设置画笔颜色
turtle.width(width) # 设置画笔宽度
turtle.circle(radius) # 绘制半径为radius的圆
turtle.dot(size) # 绘制大小为size的圆点
turtle.begin_fill() # 开始填充
turtle.end_fill() # 结束填充
NO.2、绘制图形
接下来,我们来看看如何使用turtle模块来绘制简单的图形。下面是绘制正方形和三角形的代码:
import turtle
# 绘制正方形
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(100)
# 绘制三角形
turtle.penup()
turtle.goto(-100, 0)
turtle.pendown()
turtle.forward(100)
turtle.right(120)
turtle.forward(100)
turtle.right(120)
turtle.forward(100)
turtle.done()
NO.3、绘制图形动画
除了静态的图形,我们还可以使用turtle模块来绘制动态的图形。比如,我们可以绘制一个旋转的正方形:
import turtle
for i in range(100):
turtle.forward(i)
turtle.right(90)
turtle.speed(100)
turtle.done()
在这个程序中,我们使用了for循环,每次向前移动i个单位长度,然后向右转90度。同时,我们使用了speed函数来控制绘制速度。
通过这些例子,相信你已经掌握了turtle模块的基本用法。在实际应用中,只要掌握了这些基本命令,就可以绘制出各种各样的图形和动画。
用Python来画一个 HelloKitty
NO.1、完整程序
import math
import turtle
# 爱心
def heart():
t.pensize(9)
t.setheading(90)
t.penup()
t.color("deeppink")
t.goto(-125, -135)
t.pendown()
t.begin_fill()
t.fillcolor('deeppink')
t.circle(9, 211)
t.fd(9 * 2.4)
t.lt(90)
t.fd(9 * 2.4)
t.circle(9, 211)
t.end_fill()
# 头
def head():
t.pensize(8)
t.pencolor("black")
t.penup()
t.goto(-130, 170)
t.pendown()
t.setheading(220)
for x in range(580):
t.forward(1)
if x < 250:
t.left(0.5)
elif x < 350:
t.left(0.1)
else:
t.left(0.5)
# 耳朵
def ears():
t.setheading(70)
for i in range(150):
t.forward(1)
if i < 80:
t.left(0.2)
elif i < 90:
t.left(10)
else:
t.left(0.2)
t.setheading(160)
for i in range(140):
t.forward(1)
t.left(0.15)
t.setheading(140)
for i in range(157):
t.forward(1)
if i < 65:
t.left(0.2)
elif i < 75:
t.left(8)
else:
t.left(0.5)
# 眼睛
def eyes():
# 左眼
t.pensize(5)
t.penup()
t.goto(-100, 60)
t.setheading(350)
t.pendown()
t.fillcolor("black")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
# 右眼
t.penup()
t.goto(50, 40)
t.setheading(350)
t.pendown()
t.fillcolor("black")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
# 鼻子
def nose():
t.penup()
t.goto(-40, 30)
t.setheading(260)
t.pendown()
t.fillcolor("#ebc80e")
t.begin_fill()
step = 0.3
for i in range(2):
for j in range(60):
if j < 30:
step += 0.02
else:
step -= 0.02
t.forward(step)
t.left(3)
t.end_fill()
# 小花
def flower(n):
for i in range(n):
t.forward(0.5)
if i < 80:
t.left(1)
elif i < 120:
t.left(2.3)
else:
t.left(1)
# 花朵
def flowers():
t.penup()
t.goto(20, 180)
t.pendown()
t.fillcolor("#dd4a76")
t.begin_fill()
t.setheading(175)
flower(200)
t.setheading(250)
flower(200)
t.setheading(325)
flower(200)
t.setheading(40)
flower(200)
t.setheading(115)
flower(170)
t.end_fill()
t.penup()
t.goto(30, 180)
t.setheading(270)
t.pendown()
t.fillcolor("#e7be04")
t.begin_fill()
t.circle(10)
t.end_fill()
# 胡须
def beard():
t.penup()
t.goto(-150, 65)
t.pendown()
t.setheading(170)
t.pensize(6)
for y in range(40):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(-150, 85)
t.pendown()
t.setheading(160)
for y in range(50):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(-150, 45)
t.pendown()
t.setheading(180)
for y in range(55):
t.forward(1)
t.left(0.3)
t.penup()
t.goto(110, 10)
t.setheading(340)
t.pendown()
for y in range(40):
t.forward(1)
t.right(0.3)
t.penup()
t.goto(120, 30)
t.setheading(350)
t.pendown()
for y in range(30):
t.forward(1)
t.right(0.3)
t.penup()
t.goto(115, 50)
t.setheading(360)
t.pendown()
for y in range(50):
t.forward(1)
t.right(0.3)
def myarc(t, r, angle):
length = 2 * math.pi * r * angle / 360 # angle角度的扇形的弧长
n = int(length / 3) + 1 # 线段条数
step_length = length / n # 每条线段的长度
step_angle = angle / n # 每条线段的角度
polyline(t, n, step_length, step_angle)
def polyline(t, n, length, angle):
for index in range(n):
t.fd(length)
t.lt(angle)
# 身体
def body():
t.pensize(8)
t.penup()
t.goto(-100, -30)
t.setheading(230)
t.pendown()
t.fillcolor("#efa9c1")
t.begin_fill()
for z in range(140):
t.forward(1)
t.left(0.2)
t.setheading(340)
for z in range(200):
t.forward(1)
t.left(0.1)
t.setheading(85)
for z in range(140):
t.forward(1)
t.left(0.1)
t.end_fill()
t.penup()
t.goto(-73, -33)
t.pendown()
t.setheading(250)
t.fillcolor("#da4b76")
t.begin_fill()
myarc(t, 40, 205)
t.setheading(170)
t.pensize(6)
t.forward(75)
t.end_fill()
# 左胳膊
t.pensize(8)
t.penup()
t.goto(-120, -17)
t.setheading(230)
t.pendown()
t.fillcolor("#d64b75")
t.begin_fill()
t.forward(50)
t.setheading(320)
for k in range(27):
t.forward(1)
t.left(1)
t.setheading(55)
for k in range(50):
t.forward(1)
t.right(0.1)
t.end_fill()
# 左手
t.penup()
t.goto(-125, -15)
t.setheading(140)
t.pendown()
t.fillcolor("pink")
t.begin_fill()
t.forward(8)
t.setheading(50)
myarc(t, 10, 190)
t.setheading(150)
for j in range(80):
t.forward(1)
t.left(2.2)
t.forward(24)
t.end_fill()
# 右胳膊
t.penup()
t.goto(27, -45)
t.pendown()
t.fillcolor("#db4e79")
t.setheading(350)
t.begin_fill()
for x in range(50):
t.forward(1)
t.right(1)
t.setheading(220)
t.forward(40)
t.setheading(100)
for x in range(50):
t.forward(1)
t.left(0.2)
t.end_fill()
# 右手
t.penup()
t.goto(70, -75)
t.pendown()
t.setheading(300)
t.forward(8)
t.setheading(30)
for x in range(40):
t.forward(1)
t.right(5)
t.setheading(280)
for x in range(70):
t.forward(1)
t.right(2)
# 右脚
t.penup()
t.goto(-70, -180)
t.pendown()
t.setheading(250)
for x in range(30):
t.forward(1)
t.left(0.3)
for x in range(160):
t.forward(1)
if x < 30:
t.left(3)
elif x < 65:
t.left(0.1)
else:
t.left(1)
# 左脚
t.penup()
t.goto(-150, -210)
t.setheading(340)
t.pendown()
t.fillcolor("pink")
t.begin_fill()
step = 1.5
for i in range(2):
for j in range(60):
if j < 30:
step += 0.1
else:
step -= 0.1
t.forward(step)
t.left(3)
t.end_fill()
# 主函数
turtle.setup(1.0, 1.0)
turtle.title("hellokitty!")
turtle.bgcolor("pink")
t = turtle.Turtle()
t.hideturtle()
t.screen.delay(0)
head()
ears()
eyes()
nose()
beard()
flowers()
body()
heart()
turtle.mainloop()
NO.2、程序分析
这是一个绘制 Hello Kitty 形象的 Python 程序。代码总共分为 9 个函数,每个函数都实现了 Hello Kitty 的一个部分,最后通过调用这些函数,将所有部分组合起来形成完整的 Hello Kitty 形象。
函数列表:
- head(): 绘制头部
- ears(): 绘制耳朵
- eyes(): 绘制眼睛
- nose(): 绘制鼻子
- beard(): 绘制胡须
- flowers(): 绘制花朵和花瓣
- body(): 绘制身体和四肢
- heart(): 绘制爱心
在代码中,使用了 turtle 库,通过画笔的移动和旋转控制绘制内容。代码中使用了许多循环语句,实现了细节的处理和精度的控制,使得 Hello Kitty 形象更加逼真。
总体来说,这个 Python 程序实现了一个完整的 Hello Kitty 形象,通过细致的绘制和精确的控制,让 Hello Kitty 在屏幕上生动而形象地呈现出来。同时,这个程序也展示了 Python 的画图能力和代码控制能力。
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板
若有侵权,请联系删除