有一部分Python计算生态随Python安装包一起发布,用户可以随时使用,被称为Python标准库。受限于Python安装包的设定大小,标准库的数量不会很多,大概在270个左右,下面介绍其中的3个。
(1)turtle库是Python重要的标准库之一,它能够进行基本的图形绘制。
(2)turtle库绘制图像有一个基本框架:一个小海龟在坐标系中爬行,其爬行轨迹形成了绘制图形。
①对于小海龟来说,有“前进”、“后退”、“旋转”等爬行行为,对坐标系的探索也通过“前进方向”、“后退方向”、“左侧方向”和“右侧方向”等小海龟自身角度方位来完成。
②刚开始绘制时,小海龟位于画布正中央,此处坐标为(0,0),前进方向为水平右方。
(3)使用import保留字对turtle库的引用有如下几种方式:
①import turtle:对turtle库中函数调用采用“turtle.<函数名>()”形式。
②from turtle import *:对turtle库中函数调用直接采用“<函数名>()”形式。
③from turtle import <函数名>:对turtle库中函数调用直接采用“<函数名>()”形式,但只能使用引用过的指定函数。
④import turtle as t:对turtle库中函数调用采用“t.<函数名>()”形式。(给turtle赋予别名t,t可以使用其它别名)
(1)函数使用方式:Turtle.setup(width,height,startx,starty)。
(2)作用:设置主窗体大小和位置。
(3)参数:
①width——窗口宽度。如果值是整数,表示的是像素值;如果值是小数,表示窗口宽度与屏幕的比例。
②height——窗口高度。如果值是整数,表示的是像素值;如果值是小数,表示窗口宽度与屏幕的比例。
③startx——窗口左侧与屏幕左侧的像素距离。如果值是None,窗口位于屏幕水平中央。
④starty——窗口左侧与屏幕顶部的像素距离。如果值是None,窗口位于屏幕垂直中央。
函数 |
描述 |
pendown() |
放下画笔(笔接触屏幕),之后,移动画笔将绘制形状 |
penup() |
提起画笔(笔不接触屏幕),之后,移动画笔不绘制形状 |
pensize(width) |
设置画笔宽度,当无参数输入时返回当前画笔宽度 |
pencolor(colorstring)或pencolor((r,g,b)) |
pencolor(colorstring):设置画笔颜色,当无参数输入时返回当前画笔颜色(colorstring是表示颜色的字符串,如“red”表示红色) |
pencolor((r,g,b)):设置画笔颜色,(r,g,b)是颜色对应的RGB的0~1数值,例如(1,0.65,0) |
|
color(colorstring1,colorstring2)或color((r1,g1,b1),(r2,g2,b2)) |
color(colorstring1,colorstring2):设置画笔颜色和背景颜色,当无参数输入时返回当前画笔和背景颜色(colorstring是表示颜色的字符串,如“blue”表示蓝色) |
color((r1,g1,b1),(r2,g2,b2)):设置画笔颜色,(r,g,b)是颜色对应的RGB的0~1数值 |
|
begin_fill() |
设置填充区域色彩,无参数,在开始绘制拟填充背景图形前调用 |
end_fill() |
与begin_fill配对使用,无参数,在结束绘制拟填充背景图形前调用 |
filling() |
返回当前图形背景颜色的填充状态,如果当前代码在begin_fill()和end_fill()之间将返回True,否则返回False |
clear() |
清空当前海龟对象绘制的图形,但不改变其位置和角度 |
reset() |
清空当前绘图窗口,海龟对象绘图位置和角度回归初始状态 |
screensize(width,height,bgcolor) |
设置当前画布窗口的宽度为width(以像素为单位),高度为height(以像素为单位),背景颜色为bgcolor(表示颜色的字符串或颜色对应的RGB的0~1数值);如果不给出参数,则以元组形式返回当前画布窗口的宽度和高度(weight,height) |
hideturtle() |
隐藏画笔的turtle形状 |
showturtle() |
显示画笔的turtle形状 |
isvisible() |
如果turtle画笔的形状显示,则返回True,否则返回False |
write(str,font=None) |
根据设置的字体font形式(font是由字体名称、字体尺寸和字体类型3个元素构成的元组,可选),将字符串str显示在画布上 |
函数 |
描述 |
forward(distance) |
控制小海龟(画笔)向当前行进方向移动distance个像素(当distance为负数时,表示向相反方向移动) |
backward(distance) |
控制小海龟(画笔)向当前行进的反方向移动distance个像素(当distance为负数时,表示向前进方向移动) |
right(angle) |
改变画笔行进方向为当前方向右侧angle角度(angle为整数值,是相对当前行进方向的角度值) |
left(angle) |
改变画笔行进方向为当前方向左侧angle角度(angle为整数值,是相对当前行进方向的角度值) |
goto(x,y) |
移动画笔到画布中的特定位置,该位置以坐标(x,y)方式表达,如果当前画笔处于落下状态,则绘制当前位置到目标位置的线条 |
setx(x) |
修改画笔的横坐标为x,纵坐标不变 |
srty(y) |
修改画笔的纵坐标为y,横坐标不变 |
setheading(angle) |
设置小海龟当前行进方向为angle,该角度是绝对方向角度值(如下图所示,该angle与当前行进方向无关) |
home() |
移动画笔到坐标系原点,画笔方向改为初始方向 |
circle(radius,e) |
根据半径radius绘制角度为extent的弧形 |
dot(size,color) |
绘制一个带有背景色color、直径为size的原点 |
undo() |
撤销绘图的最后一次动作 |
speed(s) |
设置画笔的绘制速度,参数为0~10,0表示没有绘制动作,1~10逐步增加绘制速度,超过10则等同于参数为0 |
import turtle
turtle.pensize(3) # 设置画笔宽度为3
# 绘制红色三角形
turtle.penup() # 提笔,画笔离开屏幕
turtle.goto(-200,-50) # 移动画笔到目标位置
turtle.pendown() # 画笔接触屏幕
turtle.begin_fill() # 开启填充模式,一旦画出闭合图形,用当前填充区域颜色进行填充
turtle.color("red") # 设置画笔和填充区域的颜色
turtle.circle(40, steps=3)
turtle.end_fill() # 结束填充模式
turtle.penup() # 提笔,画笔离开屏幕
# 显示绿色文字
turtle.color("green")
turtle.penup() # 提笔,画笔离开屏幕
turtle.goto(-100,-50) # 移动画笔到目标位置
turtle.pendown() # 画笔接触屏幕
turtle.write(("红色三角形"),font=("Times",15,"bold")) # 写字
turtle.hideturtle() # 隐藏画笔
turtle.done()
(1)Python提供的random库可用于产生各种分布的伪随机数序列。
(2)random库提供了不同类型的随机数函数,其中最基本的函数是random.random(),它生成一个[0.0,1.0)之间的随机小数,所有其它随机函数都是基于这个函数扩展而来。
函数 |
描述 |
seed(a=None) |
为随机数序列确定种子,参数为随机数种子(整数或浮点数,默认值为当前系统时间) |
random() |
生成一个[0.0,1.0)之间的随机小数 |
randint(a,b) |
生成一个[a,b]之间的随机整数 |
getrandbits(k) |
生成k比特长度的随机整数,其中k是二进制位数(返回的结果是十进制整数,该数由k位的二进制随机数转换而得) |
randrange(start,stop,step) |
生成一个[start,stop)之间以step为步数的随机整数,使用方法与range类似(step可选),任意两个使用同一个随机数种子生成的随机数相减,得到的结果必为step的整数倍 |
uniform(a,b) |
生成一个[a,b]之间的随机小数 |
choice(seq) |
从序列seq(比如列表、元组、字符串)中随机返回一个元素 |
shuffle(seq) |
将序列seq(比如列表)中的元素排列打乱(由于元组不可变,因此不能作为该函数的参数) |
sample(pop,k) |
从pop表示的组合数据类型(比如列表、元组、字符串、集合)中随机选取k个元素,以列表类型返回(pop中所含的元素要不少于k个) |
(1)time库是Python提供的处理时间标准库,它提供系统级精确计时器的计时功能,可以用来分析程序性能,也可以暂停程序运行时间。
(2)time库的功能主要分为3个方面:时间处理、时间格式化和计时。
(1)使用“time.time()”可获取当前时间戳。
(2)使用“time.gmtime(secs)”可获取时间戳secs对应的struct_time对象(其元素构成如下表所示),如没有参数则默认为当前时间戳。
(3)使用“time.localtime(secs)”可获取时间戳secs对应的本地时间的struct_time对象。
(4)使用“time.ctime(secs)”可获取时间戳secs对应的易读字符串表示,内部会调用time.localtime()函数以输出当地时间,如没有参数则默认为当前时间戳。
下标 |
属性 |
值 |
0 |
tm_year |
年份(整数) |
1 |
tm_mon |
月份(1~12) |
2 |
tm_mady |
日期(1~31) |
3 |
tm_hour |
小时(0~23) |
4 |
tm_min |
分钟(0~59) |
5 |
tm_sec |
秒(0~59) |
6 |
tm_wday |
星期(0~6,0表示周一,以此类推) |
7 |
tm_yday |
该年的第几天(1~366) |
8 |
tm_isdst |
是否是夏令时(0表示否,1表示是,-1表示未知) |
(1)使用“time.mktime(t)”将struct_time对象t转换为时间戳(t代表当地时间)。
(2)使用“time.strftime(t)”几乎可以以任何通用格式输出时间,该方法利用一个格式字符串对时间格式进行表示(该方法的格式化控制符如下表所示)。
格式化字符 |
日期/时间 |
取值 |
%Y |
年份 |
0001~9999 |
%m |
月份 |
01~12 |
%B |
月名 |
January~December |
%b |
月名缩写 |
Jan~Dec |
%d |
日期 |
01~31 |
%A |
星期 |
Monday~Sunday |
%a |
星期缩写 |
Mon~Sun |
%H |
小时(24h制) |
00~23 |
%I |
小时(12h制) |
01~12 |
%p |
上午/下午 |
AM,PM |
%M |
分钟 |
00~59 |
%S |
秒 |
00~59 |
(3)strptime方法与strftime方法完全相反,用于提取字符串中的时间来生成将struct_time对象。
(1)计时主要包括3个函数:sleep、monotonic、perf_counter。
(2)以1000万次循环为主题,模拟实际程序的核心模块(coreLoop),用sleep来模拟实际程序的其它模块(otherLoop)。
import time
def coreLoop():
limit = 10 ** 7
while limit > 0:
limit = limit - 1
def otherLoop1():
time.sleep(0.2) # 程序暂停0.2秒
def otherLoop2():
time.sleep(0.4) # 程序暂停0.4秒
startTime = time.localtime() # 程序开始运行的时刻
print('程序开始时刻:', time.strftime('%Y-%m-%d %H:%M:%S', startTime))
startPerfCounter = time.perf_counter() # 此时需要测试的主体部分开始运行,启动计时器(从0开始计时)
otherLoop1() # 运行模块1
otherLoop1PerfCounter = time.perf_counter() # 模块1运行完成,采集当前计时器的计时
otherLoop1Perf = otherLoop1PerfCounter - startPerfCounter # 结合主体部分开始运行的时间,计算得出模块1的运行时间
coreLoop() # 运行核心模块
coreLoopPerfCounter = time.perf_counter() # 核心模块运行完成,采集当前计时器的计时
coreLoopPerf = coreLoopPerfCounter - otherLoop1PerfCounter # 结合模块1运行结束时的时间,计算得出核心模块的运行时间
otherLoop2() # 运行模块2
otherLoop2PerfCounter = time.perf_counter() # 模块2运行完成,采集当前计时器的计时
otherLoop2Perf = otherLoop2PerfCounter - coreLoopPerfCounter # 结合核心模块开始运行的时间,计算得出模块2的运行时间
endPerfCounter = time.perf_counter() # 主体部分运行结束,采集当前计时器的计时
totalPerf = endPerfCounter - startPerfCounter # 结合主体部分开始运行的时间,计算得出主体部分的运行时间
endTime = time.localtime() # 程序结束运行的时刻
print("模块1的运行时间是:%f秒" % otherLoop1Perf)
print("核心模块的运行时间是:%f秒" % coreLoopPerf)
print("模块2的运行时间是:%f秒" % otherLoop2Perf)
print("程序运行总时间是:%f秒" % totalPerf)
print("程序结束时刻:", time.strftime("%Y-%m-%d %H:%M:%S", endTime))