注明:本系列课程专为全国计算机等级考试二级 Python 语言程序设计考试服务
目录
考纲考点
知识导图
1、turtle库概述
turtle库与基本绘图
窗体函数
画笔状态函数
画笔运动函数
2、random库概述
random库与随机数运用
3、time库概述
4、time库与程序计时
5、实例解析:雪景艺术绘图
本章小结
import turtle
turtle.circle(200)
from turtle import *
circle(200)
import turtle as t
t.circle(200)
作用:设置主窗体的大小和位置
参数:
width :窗口宽度,如果值是整数,表示的像素值;如果值是小数,表示窗口宽度与屏幕的比例;
height::窗口高度,如果值是整数,表示的像素值;如果值是小数,表示窗口高度与屏幕的比例;
startx:窗口左侧与屏幕左侧的像素距离,如果值是None,窗口位于屏幕水平中央;
starty:窗口顶部与屏幕顶部的像素距离,如果值是None,窗口位于屏幕垂直中央;
函数 | 描述 |
pendown() | 放下画笔 |
penup() | 提起画笔,与pendown()配对使用 |
pensize(width) | 设置画笔线条的粗细为指定大小 |
color() | 设置画笔的颜色 |
begin_fill() | 填充图形前,调用该方法 |
end_fill() | 填充图形结束 |
filling() | 返回填充的状态,True为填充,False为未填充 |
clear() | 清空当前窗口,但不改变当前画笔的位置 |
reset() | 清空当前窗口,并重置位置等状态为默认值 |
screensize() | 设置画布的长和宽 |
hideturtle() | 隐藏画笔的turtle形状 |
showturtle() | 显示画笔的turtle形状 |
isvisible() | 如果turtle可见,则返回True |
turtle.penup() 别名 turtle.pu(), turtle.up()
作用:抬起画笔,之后,移动画笔不绘制形状
参数:无
turtle.pendown() 别名 turtle.pd(), turtle.down()
作用:落下画笔,之后,移动画笔将绘制形状
参数:无
turtle.pensize(width) 别名 turtle.width()
作用:设置画笔宽度,当无参数输入时返回当前画笔宽度
参数:
width :设置的画笔线条宽度,如果为None或者为空,函数则返回当前画笔宽度。
turtle.pencolor(colorstring) 或者 turtle.pencolor((r,g,b))
作用:设置画笔颜色,当无参数输入时返回当前画笔颜色
参数:
colorstring :表示颜色的字符串,例如:"purple"、"red"、"blue"等(r,g,b): 颜色对应RGB的01数值,例如:1, 0.65, 0
函数 | 描述 |
forward() | 沿着当前方向前进指定距离 |
backward() | 沿着当前相反方向后退指定距离 |
right(angle) | 向右旋转angle角度 |
left(angle) | 向左旋转angle角度 |
goto(x,y) | 移动到绝对坐标(x,y)处 |
setx( ) | 将当前x轴移动到指定位置 |
sety( ) | 将当前y轴移动到指定位置 |
setheading(angle) | 设置当前朝向为angle角度 |
home() | 设置当前画笔位置为原点,朝向东。 |
circle(radius,e) | 绘制一个指定半径r和角度e的圆或弧形 |
dot(r,color) | 绘制一个指定半径r和颜色color的圆点 |
undo() | 撤销画笔最后一步动作 |
speed() | 设置画笔的绘制速度,参数为0-10之间 |
turtle.seth()函数用来改变画笔绘制方向turtle.fd(distance) 别名 turtle.forward(distance)
作用:向小海龟当前行进方向前进distance距离
参数:
distance :行进距离的像素值,当值为负数时,表示向相反方向前进。
turtle.seth(to_angle) 别名 turtle.setheading(to_angle)
作用:设置小海龟当前行进方向为to_angle,该角度是绝对方向角度值。
参数:
to_angle :角度的整数值。
turtle.circle(radius, extent=None)
作用:根据半径radius绘制extent角度的弧形。
参数:
radius :弧形半径,当值为正数时,半径在小海龟左侧,当值为负数时,半径在小海龟右侧;
extent : 绘制弧形的角度,当不给该参数或参数为None时,绘制整个圆形。
>>>from random import *
>>>random()
0.5780913011344704
>>>random()
0.20609823213950174
函数 | 描述 |
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(seq) | 从序列类型(例如:列表)中随机返回一个元素 |
shuffle(seq) | 将序列类型中元素随机排列,返回打乱后的序列 |
sample(pop, k) | 从pop类型中随机选取k个元素,以列表类型返回 |
>>>from random import *
>>>seed(10)
>>>random()
0.5714025946899135
>>>random()
0.4288890546751146
>>>seed(10) #再次设置相同的种子,则后续产生的随机数相同
>>>random()
0.5714025946899135
>>>random()
0.4288890546751146
>>>import time
>>>time.localtime()
time.struct_time(tm_year=2017, tm_mon=12,
tm_mday=2, tm_hour=14, tm_min=44, tm_sec=9,
tm_wday=4, tm_yday=26, tm_isdst=0)
• 时间处理主要包括4 个函数: time.tiem ( ) 、time.gmtime()、time.localtime() 、time.ctime()。
• 时间格式化主要包括3个函数:time.mktime()、time.strftime()、time.strptime()。
• 计时主要包括3 个函数: time.sleep ( ) 、time.monotonic()、time.perf_counter()
>>>import time
>>>time.time()
1516939876.6022282
>>> time.gmtime(now)
time.struct_time(tm_year=2018, tm_mon=1,
tm_mday=26, tm_hour=4, tm_min=11, tm_sec=16,
tm_wday=4, tm_yday=26, tm_isdst=0)
>>> time.localtime(now)
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=26,
tm_hour=12, tm_min=11, tm_sec=16, tm_wday=4,
tm_yday=26, tm_isdst=0)
>>> time.ctime(now)
'Fri Jan 26 12:11:16 2018'
下标 | 属性 | 值 |
0 | tm_year | 年份,整数 |
1 | tm_mon | 月份[1, 12] |
2 | tm_mday | 日期[1, 31] |
3 | tm_hour | 小时[0, 23] |
4 | tm_min | 分钟[0, 59] |
5 | tm_sec | 秒[0, 61] |
6 | tm_wday | 星期[0, 6](0表示星期一) |
7 | tm_yday | 该年第几天[1, 366] |
8 | tm_isdst | 是否夏时令,0否, 1是, -1未知 |
>>> t = time.localtime(now)
>>> time.mktime(t)
1516939876.0
>>> time.ctime(time.mktime(t))
'Fri Jan 26 12:11:16 2018'
>>> lctime = time.localtime()
>>> lctime
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=26,
tm_hour=12, tm_min=55, tm_sec=20, tm_wday=4, tm_yday=26,
tm_isdst=0)
>>> time.strftime("%Y-%m-%d %H:%M:%S", lctime)
'2018-01-26 12:55:20'
格式化字符串 | 日期/时间 | 值范围和实例 |
%Y | 年份 | 0001~9999,例如:1900 |
%m | 月份 | 01~12,例如:10 |
%B | 月名 | January~December,例如:April |
%b | 月名缩写 | Jan~Dec,例如:Apr |
%d | 日期 | 01 ~ 31,例如:25 |
%A | 星期 | Monday~Sunday,例如:Wednesday |
%a | 星期缩写 | Mon~Sun,例如:Wed |
%H | 小时(24h制) | 00 ~ 23,例如:12 |
%I | 小时(12h制) | 01 ~ 12,例如:7 |
%p | 上/下午 | AM, PM,例如:PM |
%M | 分钟 | 00 ~ 59,例如:26 |
%S | 秒 | 00 ~ 59,例如:26 |
>>> timeString = '2018-01-26 12:55:20'
>>> time.strptime(timeString, "%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=26,
tm_hour=12, tm_min=55, tm_sec=20, tm_wday=4, tm_yday=26,
tm_isdst=-1)
import time
def coreLoop():
limit = 10**8
while (limit > 0):
limit -= 1
def otherLoop1():
time.sleep(0.2)
def otherLoop2():
time.sleep(0.4)
def main():
startTime = time.localtime()
print('程序开始时间:', time.strftime('%Y-%m-%d %H:%M:%S', startTime))
startPerfCounter = time.perf_counter()
otherLoop1()
otherLoop1PerfCounter = time.perf_counter()
otherLoop1Perf = otherLoop1PerfCounter - startPerfCounter
coreLoop()
coreLoopPerfCounter = time.perf_counter()
coreLoopPerf = coreLoopPerfCounter - otherLoop1PerfCounter
otherLoop2()
otherLoop2PerfCounter = time.perf_counter()
otherLoop2Perf = otherLoop2PerfCounter - coreLoopPerfCounter
endPerfCounter = time.perf_counter()
totalPerf = endPerfCounter - startPerfCounter
endTime = time.localtime()
print("模块1运行时间是:{}秒".format(otherLoop1Perf))
print("核心模块运行时间是:{}秒".format(coreLoopPerf))
print("模块2运行时间是:{}秒".format(otherLoop2Perf))
print("程序运行总时间是:{}秒".format(totalPerf))
print('程序结束时间:', time.strftime('%Y-%m-%d %H:%M:%S', endTime))
main()
程序开始时间: 2017-12-26 13:46:39
模块1运行时间是:0.20003105182731706秒
核心模块运行时间是:5.987101639820927秒
模块2运行时间是:0.40018931343066555秒
程序运行总时间是:6.587323585324574秒
程序结束时间: 2017-12-26 13:46:45
1. 构建图的背景
2. 绘制雪花效果
3. 绘制雪地效果
设定窗体大小为800x600像素,窗体颜色为black。然后,定义上方雪花绘制函数drawSnow()和下方雪地绘制函数drawGround()。
为体现艺术效果,drawSnow()函数首先隐藏turtle画笔、设置画笔大小、绘制速度,然后使用for循环绘制100朵雪花。雪花大小snowsize、雪花花瓣数dens都分别设定为一定数值范围随机数。最后通过for循环绘制出多彩雪花。
drawGround()函数使用for循环绘制地面400个小横线,画笔大小pensize、位置坐标x、y、线段长度均通过randint()函数作为随机数产生。
# SnowView.py
from turtle import *
from random import *
def drawSnow():
hideturtle()
pensize(2)
for i in range(100):
r, g, b = random(), random(), random()
pencolor(r,g,b)
penup()
setx(randint(-350,350))
sety(randint(1,270))
pendown()
dens = randint(8,12)
snowsize = randint(10,14)
for j in range(dens):
forward(snowsize)
backward(snowsize)
right(360/dens)
def drawGround():
hideturtle()
for i in range(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,200,200)
tracer(False)
bgcolor("black")
drawSnow()
drawGround()
done()
本章主要讲解了3个重要的Python标准库:turtle、random和time,分别用于基本图形绘制、随机数运用和时间处理。再详细讲解各函数库功能基础上,通过雪景随机艺术画的绘制进一步帮助读者掌握这三个有趣且有用的标准
库。
能够用Python绘图了,最想绘制的图形是什么?最想送给谁?