本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢!
一、前言
本文介绍如何使用Python的海龟画图工具turtle,画一副祝福节日快乐的画。
-
什么是Python?
Python是由荷兰人吉多·范罗苏姆于1990年代初设计的一门编程语言,应用领域非常广泛,尤其在数据分析、人工智能领域,已经成为最受欢迎的程序设计语言之一,比较适合新手学习。
这门编程语言之所以叫Python,意为大蟒蛇,是因为当时有一个电视喜剧《蒙提·派森的飞行马戏团》(Monty Python’s Flying Circus)在热播,很受大家喜欢。
PS:Python语言标准库官方使用手册:https://docs.python.org/zh-cn/3/library/
-
什么是海龟画图工具turtle?
turtle,中文意思为海龟,是Python语言中自带的一个用于绘制图像的函数库。turtle函数库为使用者提供一个或多个小乌龟作为画笔,使用者可通过turtle库提供的各种方法来控制小乌龟在一个平面直角坐标系中移动并绘制移动轨迹以画出想要的图案。
二、代码示例
首先,看一下使用Python画的祝福节日快乐画是什么样的?
之后,看一下对应的Python代码,如下:
# 导入画笔函数库
import turtle as tu
# 导入随机数函数库
import random as ra
# 导入数学函数库
import math as ma
"""
气球祝福节日快乐
@author 姑苏老陈
@date 2024-06-13
"""
# 设置画布大小
tu.setup(1.0, 1.0)
# 设置画布背景颜色
tu.bgcolor('sky blue')
# 返回或设置画笔的属性
t = tu.Pen()
# 隐藏小海龟
t.ht()
# 定义颜色列表
colors = ['red', 'orange', 'yellow', 'lime', 'pink', 'violet', 'white']
# 定义气球类
class Balloon:
# 初始化函数
def __init__(self):
self.r = ra.randint(12, 20) # 气球的半径
self.x = ra.randint(-1000, 1000) # 气球的横坐标
self.y = ra.randint(-500, 500) # 气球的纵坐标
self.f = ra.uniform(-3.14, 3.14) # 气球左右移动呈正弦函数
self.speed = ra.randint(5, 10) # 气球移动速度
self.color = ra.choice(colors) # 气球的颜色
# 定义气球移动函数
def move(self):
if self.y <= 500: # 当气球还在画布中时
self.y += self.speed # 设置上下移动速度
self.x += self.speed * ma.sin(self.f) # 设置左右移动速度
self.f += 0.1 # 可以理解成标志,改变左右移动的方向
else: # 当气球漂出了画布时,重新生成一个气球
self.r = ra.randint(12, 20)
self.x = ra.randint(-1000, 1000)
self.y = -500
self.f = ra.uniform(-3.14, 3.14)
self.speed = ra.randint(5, 10)
self.color = ra.choice(colors)
# 定义画气球函数
def draw(self):
t.penup()
# 确定气球位置
t.goto(self.x, self.y)
t.pendown()
t.color(self.color)
t.left(45)
t.begin_fill()
t.fillcolor(self.color)
# 画气球的主体
for i in range(2):
t.circle(self.r * 2, 90)
t.circle(self.r, 90)
t.end_fill()
t.hideturtle()
# 画气球的牵线
t.circle(self.r, -45)
t.right(90)
t.circle(20, 90)
Balloons = [] # 定义列表,保存所有气球
# 循环创建一大波气球对象,放在列表中
for i in range(10000):
Balloons.append(Balloon())
# 循环移动气球、画气球、气球漂浮
while True: # 开始漂浮
tu.tracer(0) # 设置刷新图形的延迟时间,加速复杂图形的绘制
t.clear() # 从屏幕中删除指定海龟的绘图
for i in range(100): # 在画布中设置一大波漂浮的气球
Balloons[i].move()
Balloons[i].draw()
# 写祝福语
tu.penup()
tu.goto(-250, 20)
tu.pendown()
tu.color("red")
tu.write("节 日 快 乐 !", font=("黑体", 30, "italic")) # "italic"表示斜体
tu.hideturtle()
tu.update() # 执行一次 TurtleScreen 刷新。在禁用追踪时使用。
三、知识点梳理
本次代码示例中涉及的Python知识点梳理如下:
turtle.speed(speed=None)
参数:
speed -- 一个 0..10 范围内的整型数或速度字符串 (见下)
设置海龟移动的速度为 0..10 表示的整型数值。如未指定参数则返回当前速度。
如果输入数值大于 10 或小于 0.5 则速度设为 0。速度字符串与速度值的对应关系如下:
"fastest": 0 最快
"fast": 10 快
"normal": 6 正常
"slow": 3 慢
"slowest": 1 最慢
速度值从 1 到 10,画线和海龟转向的动画效果逐级加快。
注意: speed = 0 表示 没有 动画效果。forward/back 将使海龟向前/向后跳跃,同样的 left/right 将使海龟立即改变朝向。
turtle.tracer(n=None, delay=None)
参数:
n -- 非负整型数
delay -- 非负整型数
启用/禁用海龟动画并设置刷新图形的延迟时间。如果指定 n 值,则只有每第 n 次屏幕刷新会实际执行。(可被用来加速复杂图形的绘制。) 如果调用时不带参数,则返回当前保存的 n 值。第二个参数设置延迟值。
turtle.update()
执行一次 TurtleScreen 刷新。在禁用追踪时使用。
turtle.clear()
从屏幕中删除指定海龟的绘图。不移动海龟。海龟的状态和位置以及其他海龟的绘图不受影响。
random.randint(a, b)
返回随机整数 N 满足 a <= N <= b。相当于 randrange(a, b+1)。
random.uniform(a, b)
返回一个随机浮点数 N ,当 a <= b 时 a <= N <= b ,当 b < a 时 b <= N <= a 。
random.choice(seq)
从非空序列 seq 返回一个随机元素。
创建一个类,class 之后为类的名称并以冒号结尾。如下示例:
#coding=utf-8
class Employee:
'所有员工的基类'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary
说明:
1、empCount 变量是一个类变量,它的值将在这个类的所有实例之间共享。你可以在内部类或外部类使用 Employee.empCount 访问。
2、第一种方法 __init__() 方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。
3、self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下示例:
list1 = [1, 2, 3, 4, 5 ];
list2 = ["a", "b", "c", "d"];
for 语句用于对序列(例如字符串、元组或列表)或其他可迭代对象中的元素进行迭代。如下示例:
for i in range(10):
print(i)
while 语句用于在表达式保持为真的情况下重复地执行。如下示例:
i = 1
while True:
print(i)
i = i + 1
四、总结
以上介绍了如何使用Python的海龟画图工具turtle画祝福节日快乐画。另外,对代码中涉及的Python编程知识点,做了简单的介绍。希望对大家有帮助,谢谢关注。
如果您对文章中内容有疑问,欢迎在评论区进行留言,我会尽量抽时间给您回复。如果文章对您有帮助,欢迎点赞、收藏。您的点赞,是对我最大的支持和鼓励,谢谢 :-)