【题外话】介于前几天春节来临是吧,给自己放了几天假。其实就是偷懒。好啦,说完啦。
turtlr库包含100多个功能函数,主要包括窗体函数、画笔状态和画笔运动函数3种
turtle.setup(width,height,startx,starty)
width:窗口宽度。若为整数则代表像素值,小数则代表窗口宽度和屏幕的比例
height:窗口高度。若为整数则代表像素值,小数则代表窗口宽度和屏幕的比例
startx:窗体左侧和屏幕左侧的像素距离。值为None,窗体位于屏幕水平中央。
starty:窗体顶部与屏幕顶部的像素距离。值为None,窗体位于屏幕垂直中央
函数 | 描述 |
---|---|
penup() | 提起画笔,之后,移动不绘制图形 |
pendown() | 放下画笔,之后,移动绘制图形,与penup()配套使用 |
pensize(width) | 设置画笔线条粗细 |
pencolor() | 设置画笔的颜色 |
color() | 画笔和填充颜色 |
begin_fill() | 填充图形前调用该方法 |
end_file() | 填充图形结束 |
filling() | 返回填充的状态,True为填充,False为未填充 |
clear() | 清空当前窗口,但不改变画笔状态 |
reset() | 清空当前窗口,同时重置位置等状态为默认值 |
screensize() | 设置画布窗口的宽度、高度和背景颜色 |
hideturtle() | 隐藏画笔的turtle形状 |
showturtle() | 显示画笔的turtle形状 |
isvisible() | 如果turtle可见,则返回True |
write(str,font=None) | 输出font字体的字符串 |
函数 | 描述 |
---|---|
forward(distance) 别名:fd() | 沿着当前方向前进指定距离 |
backward(distance) 别名:bk() | 沿着当前相反的方向运动指定距离 |
right(angle) | 向右旋转angle角度 |
left(angle) | 向左旋转angle角度 |
goto(x,y) | 移动到绝对坐标(x,y)处 |
setx(x) | 画笔横坐标修改到x,纵坐标不变 |
sety(y) | 画笔纵坐标修改到y,横坐标不变 |
setheading(angle) 别名:seth() | 设置当前朝向angle角度 |
home() | 设置画笔位置为原点,朝向东 |
circle(radius,extent=None,steps=None) | 绘制一个半径为r,角度为e的圆或弧,steps为该圆的内切多边形,边数为steps |
dot(radius,e) | 绘制一个半径为r,颜色为e的圆点 |
undo() | 撤销画笔最后一步操作 |
speed() | 设置画笔的绘制速度,参数在0~10之间 |
为了更好的理解这些函数的使用,在此给出三角形到多边形的彩色绘制以及文字输出的练习
import turtle as t #导入turtle包并起别名为 t 进行绘制
t.pensize(3) #设置画笔粗细
# 绘制三角形
t.penup() #拿起画笔
t.goto(-200,-50) #画笔移动到坐标(-200,-50处)
t.speed(1) #设置画笔速度
t.begin_fill() #填充图形前调用
t.color('red') #填充颜色为red
t.circle(40,steps=3) #绘制半径四十的圆的内接三角形。
t.end_fill() #结束填充
# 绘制四边形
t.penup() #拿起画笔
t.goto(-100,-50) #画笔移动到坐标(-100,-50处)
t.speed(1) #设置画笔速度
t.begin_fill() #填充图形前调用
t.color('blue') #填充颜色为blue
t.circle(40,steps=4) #绘制半径四十的圆的内接四边形。
t.end_fill() #结束填充
# 绘制五边形
t.penup() #拿起画笔
t.goto(0,-50) #画笔移动到坐标(0,-50处)
t.speed(1) #设置画笔速度
t.begin_fill() #填充图形前调用
t.color('green') #填充颜色为green
t.circle(40,steps=5) #绘制半径四十的圆的内接五边形。
t.end_fill() #结束填充
# 绘制六边形
t.penup() #拿起画笔
t.goto(100,-50) #画笔移动到坐标(100,-50处)
t.speed(1) #设置画笔速度
t.begin_fill() #填充图形前调用
t.color('yellow') #填充颜色为yellow
t.circle(40,steps=6) #绘制半径四十的圆的内接六边形。
t.end_fill() #结束填充
# 绘制圆形
t.penup() #拿起画笔
t.goto(200,-50) #画笔移动到坐标(-200,-50处)
t.speed(1) #设置画笔速度
t.begin_fill() #填充图形前调用
t.color('purple') #填充颜色为red
t.circle(40) #绘制半径四十的圆
t.end_fill() #结束填充
# 文字输出
t.color('green') #文字表示颜色
t.penup() #拿起画笔
t.goto(-100,50) #移动到(-100,50)坐标处
t.pendown() #放下画笔
t.write(('Cool Colorful Shapes'),font=('Time','18','bold'))
t.hideturtle()
t.done()
random库采用梅森旋转算法生成伪随机数序列,可用于出随机数要求更高的解加密算法外的大多数工程应用。random库提供了不同类型的随机数函数,最基本的函数是random.random(),它生成一个[0.0,1.0)之间的小数。所有其他的随机函数都是基于这个函数扩展而来。
random库中常用函数如下表
函数 | 描述 |
---|---|
seed(a = None) | 初始化随机数种子,默认值为时间 |
random() | 生成一个[0.0 ,1.0)之间的小数 |
randint(a,b) | 生成一个[a,b]之间的整数、 |
getrandbits(k) | 生成一个k比特长度的随机整数 |
randrange(start,stop[,step]) | 生成一个[start,stop)之间以step为步长的随机整数 |
uniform(a,b) | 生成一个[a,b]之间的随机小数 |
choice(sep) | 从序列类型(例如列表)中随机返回一个元素 |
shuffle(sep) | 将序列类型中元素随机排列,返回打乱后的序列 |
sample(pop,k) | 从pop类型中随机选取k个元素,以列表类型返回 |
time.strftime()几乎可以以任意通用格式输出时间。下表列出该方法的控制符
格式化字符串 | 日期/年份 | 值范围 |
---|---|---|
%y | 两位数的年份表示 | (00-99) |
%Y | 四位数的年份表示 | (0001-9999) |
%m | 月份 | (01-12) |
%d | 月内中的一天 | (0-31) |
%H | 24小时制小时数 | (0-23) |
%I | 12小时制小时数 | (01-12) |
%M | 分钟数 | (00-59) |
%S | 秒 | (00-59) |
%a | 本地简化星期名称 | Mon~Sun |
%A | 本地完整星期名称 | Monday~Sunday |
%b | 本地简化的月份名称 | Jan~Dec |
%B | 本地完整的月份名称 | January~December |
%c | 本地相应的日期表示和时间表示 | |
%j | 年内的一天 | (001-366) |
%p | 本地A.M.或P.M.的等价符 | |
%U | 一年中的星期数 | (00-53)星期天为星期的开始 |
%w | 星期 | (0-6),星期天为星期的开始 |
%W | 一年中的星期数 | (00-53)星期一为星期的开始 |
%x | 本地相应的日期表示 | |
%X | 本地相应的时间表示 | |
%Z | 当前时区的名称 | |
%% | %号本身 |
【步骤】
setup(800,600) # 创建画布800*600
bgcolor('black')
#雪花效果实现
def drawSnow():
hideturtle() #为了效果,隐藏画笔
pensize(2)
for i in range(100):# 循环绘制100朵雪花。
#为了使雪花颜色随机,使用random()函数生成画笔颜色rgb值。
r,g,b = random(),random(),random()
pencolor(r,g,b)
#在上方雪花区域随机选点
penup()
setx(randint(-350,350))
sety(randint(1,270))
pendown()
#随机生成雪花花瓣数量和大小,利用循环画出每个花瓣
dens = randint(5,12)
snowsize = randint(8,14)
for j in rang(dens):
# 以初始点为中心向前移动sonwsize单位再返回原点,完成一片花瓣的绘制
forward(sonwsize)
backward(sonwsize)
# 绘制完成,转动一定角度绘制下一片
right(360/dens)
# 雪地效果实现
def drawGround():
hideturtle()
for i in range(400):# 绘制400条横线模拟雪地
pensize(randint(5,10))#画笔大小随机
x = randint(-400,350)
y = randint(-280,-1)
r,g,b = -y/280,-y/280,-y/280
pencolor((r,g,b))
penup()
goto(x,y)
pendown()
forward(randint(40,100))
完成代码如下
# SnowView.py
from turtle import *
from random import *
#雪花效果实现
def drawSnow():
hideturtle() #为了效果,隐藏画笔
pensize(2)
for i in range(100):# 循环绘制100朵雪花。
#为了使雪花颜色随机,使用random()函数生成画笔颜色rgb值。
r,g,b = random(),random(),random()
pencolor(r,g,b)
#在上方雪花区域随机选点
penup()
setx(randint(-350,350))
sety(randint(1,270))
pendown()
#随机生成雪花花瓣数量和大小,利用循环画出每个花瓣
dens = randint(5,12)
snowsize = randint(8,14)
for j in range(dens):
# 以初始点为中心向前移动sonwsize单位再返回原点,完成一片花瓣的绘制
forward(snowsize)
backward(snowsize)
# 绘制完成,转动一定角度绘制下一片
right(360/dens)
# 雪地效果实现
def drawGround():
hideturtle()
for i in range(400):# 绘制400条横线模拟雪地
pensize(randint(5,10))#画笔大小随机
x = randint(-400,350)
y = randint(-280,-1)
r,g,b = -y/280,-y/280,-y/280
pencolor((r,g,b))
penup()
goto(x,y)
pendown()
forward(randint(40,100))
setup(800,600) # 创建画布800*600
#绘制开始前调用tracer(False)
#tracer()方法是直接展示给用户绘制结果,无需漫长的等待绘制过程。
#这个方法turtle里有,turle.Turtle里面也有,效果是一样的
tracer(False)# 直接展示结果,不显示绘画过程
bgcolor('black')
# 调用函数进行绘制
drawSnow()
drawGround()
done()# 画笔停止绘画,窗体不关闭