三儿的Python菜鸟历程--08--Python二级必考标准库turtle、random和time(理论笔记)
Python二级必考标准库turtle、random和time
【题外话】介于前几天春节来临是吧,给自己放了几天假。其实就是偷懒。好啦,说完啦。
一、turtle库
1.1 概述
- turtle(海龟)是Python重要的标准库之一(这是句废话)。
- 功能:进行基本的图形绘制。
- 注意,turtle图形绘制概念诞生于1969年,并在LOGO编程语言中获得成功应用。所以Python接受了turtle的概念并形成了turtle库。
- turtle库基本框架就是:一只海龟在一个坐标系中爬行,爬行轨迹形成了绘制的图形。海龟有“前进”、“后退”、“旋转”等动作,爬行时也有“前进方向”、“后退方向”、“左侧方向”、“右侧方向”等以海龟自身为基准的方位。
1.2 turtle库的基本使用
turtlr库包含100多个功能函数,主要包括窗体函数、画笔状态和画笔运动函数3种
1.2.1 窗体函数
turtle.setup(width,height,startx,starty)
width:窗口宽度。若为整数则代表像素值,小数则代表窗口宽度和屏幕的比例
height:窗口高度。若为整数则代表像素值,小数则代表窗口宽度和屏幕的比例
startx:窗体左侧和屏幕左侧的像素距离。值为None,窗体位于屏幕水平中央。
starty:窗体顶部与屏幕顶部的像素距离。值为None,窗体位于屏幕垂直中央
1.2.2 画笔状态函数
函数 | 描述 |
---|---|
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字体的字符串 |
1.2.3 画笔运动函数
函数 | 描述 |
---|---|
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之间 |
1.3 turtle库练习
为了更好的理解这些函数的使用,在此给出三角形到多边形的彩色绘制以及文字输出的练习
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库
2.1 概述
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库
3.1概述
- 处理时间是程序最常用的功能之一。
- time库是Python提供的处理时间的标准库。time库提供了系统级的精准计时器的计时功能,可以用来分析程序性能,也可以让程序暂停运行时间。
- time库主要有3个方面的功能:时间处理、时间格式化、计时
- 时间处理主要使用4个函数:time.time()、time.gmtime()、time.localtime()、time.ctime()
- 时间格式化主要使用3个函数:time.mktime()、time.strftime()、time.strptime()
- 计时主要包括3个函数:time.sleep()、time.monotonic()、time.perf_counter()
3.2 时间格式化
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()# 画笔停止绘画,窗体不关闭
效果如下(卡顿是因为为了录制添加的sleep(15)睡眠,去掉睡眠后无卡顿):