Python标准库概览

Python标准库概览

知识点

  • 标准库: turtle库(必选)
  • 标准库: random库(必选)、time库(可选)

知识导图

img

1、turtle库概述

  • turtle(海龟)是Python重要的标准库之一,它能够进行基本的图形绘制。
  • turtle库绘制图形有一个基本框架:一个小海龟在坐标系中爬行,其爬行轨迹形成了绘制图形。对于小海龟来说,有“前进”、“后退”、“旋转”等爬行行为,对坐标系的探索也通过“前进方向”、“后退方向”、“左侧方向”和“右侧方向”等小海龟自身角度方位来完成。
  • 使用import保留字对turtle库的引用有如下三种方式
  • 第一种,import turtle,则对turtle库中函数调用采用 turtle.<函数名>() 形式。
import turtle
turtle.circle(200)
  • 第二种,from turtle import *,则对turtle库中函数调用直接采用 <函数名>()形式,不在使用turtle.作为前导。
from turtle import *
circle(200)
  • 第三种,import turtle as t,则对turtle库中函数调用采用更简洁的 t.<函数名>() 形式,保留字as的作用是将turtle库给予别名t。
import turtle as t
t.circle(200)

1.1 turtle库与基本绘图

  • turtle库包含100多个功能函数,主要包括窗体函数、画笔状态函数、画笔运动函数等三类。

1.2 窗体函数

  • turtle.setup(width, height, startx, starty)

作用:设置主窗体的大小和位置

参数:

width :窗口宽度,如果值是整数,表示的像素值;如果值是小数,表示窗口宽度与屏幕的比例;

height::窗口高度,如果值是整数,表示的像素值;如果值是小数,表示窗口高度与屏幕的比例;

startx:窗口左侧与屏幕左侧的像素距离,如果值是None,窗口位于屏幕水平中央;

starty:窗口顶部与屏幕顶部的像素距离,如果值是None,窗口位于屏幕垂直中央;

1.3 画笔状态函数

函数描述
pendown()放下画笔
penup()提起画笔,与pendown()配对使用
pensize(width)设置画笔线条的粗细为指定大小
color()设置画笔的颜色
begin_fill()填充图形前,调用该方法
end_fill()填充图形结束
filling()返回填充的状态,True为填充,False为未填充
clear()清空当前窗口,但不改变当前画笔的位置
reset()清空当前窗口,并重置位置等状态为默认值
screensize()设置画布的长和宽
hideturtle()隐藏画笔的turtle形状
showturtle()显示画笔的turtle形状
isvisible()如果turtle可见,则返回True
  • turtle中的画笔(即小海龟)可以通过一组函数来控制,其中turtle.penup()和turtle.pendown()是一组,它们分别表示画笔的提起和落下,函数定义如下:

turtle.penup() 别名 turtle.pu(), turtle.up()

作用:抬起画笔,之后,移动画笔不绘制形状

参数:无

turtle.pendown() 别名 turtle.pd(), turtle.down()

作用:落下画笔,之后,移动画笔将绘制形状

参数:无

  • turtle.pensize()函数用来设置画笔尺寸

turtle.pensize(width) 别名 turtle.width()

作用:设置画笔宽度,当无参数输入时返回当前画笔宽度

参数:

width :设置的画笔线条宽度,如果为None或者为空,函数则返回当前画笔宽度。

  • turtle.pencolor()函数给画笔设置颜色

turtle.pencolor(colorstring) 或者 turtle.pencolor((r,g,b))

作用:设置画笔颜色,当无参数输入时返回当前画笔颜色

参数:

colorstring :表示颜色的字符串,例如:“purple”、“red”、"blue"等(r,g,b): 颜色对应RGB的01数值,例如:1, 0.65, 0

1.4 画笔运动函数

函数描述
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.fd()函数最常用,它控制画笔向当前行进方向前进一个距离

turtle.seth()函数用来改变画笔绘制方向turtle.fd(distance) 别名 turtle.forward(distance)

作用:向小海龟当前行进方向前进distance距离

参数:

distance :行进距离的像素值,当值为负数时,表示向相反方向前进。

  • turtle.seth()函数用来改变画笔绘制方向

turtle.seth(to_angle) 别名 turtle.setheading(to_angle)

作用:设置小海龟当前行进方向为to_angle,该角度是绝对方向角度值。

参数:

to_angle :角度的整数值。

  • turtle.circle()函数用来绘制一个弧形

turtle.circle(radius, extent=None)

作用:根据半径radius绘制extent角度的弧形。

参数:

radius :弧形半径,当值为正数时,半径在小海龟左侧,当值为负数时,半径在小海龟右侧;

extent : 绘制弧形的角度,当不给该参数或参数为None时,绘制整个圆形。

2、random库概述

  • 使用random库主要目的是生成随机数
  • 这个库提供了不同类型的随机数函数,其中最基本的函数是random.random(),它生成一个[0.0, 1.0)之间的随机小数,所有其他随机函数都是基于这个函数扩展而来。
from random import *
print(random())
# 0.5780913011344704
print(random())
# 0.20609823213950174

2.1 random库与随机数运用

  • 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(seq)从序列类型(例如:列表)中随机返回一个元素
shuffle(seq)将序列类型中元素随机排列,返回打乱后的序列
sample(pop, k)从pop类型中随机选取k个元素,以列表类型返回
  • random库使用random.seed(a)对后续产生的随机数设置种子a。
from random import *
seed(10)
print(random())
# 0.5714025946899135
print(random())
# 0.4288890546751146
seed(10) #再次设置相同的种子,则后续产生的随机数相同
print(random())
# 0.5714025946899135
print(random())
# 0.4288890546751146
  • 设置随机数种子的好处是可以准确复现随机数序列,用于重复程序的运行轨迹。对于仅使用随机数但不需要复现的情形,可以不用设置随机数种子。n 如果程序没有显式设置随机数种子,则使用随机数生成函数前,将默认以当前系统的运行时间为种子产生随机序列。

3、time库概述

  • 处理时间是程序最常用的功能之一,time库是Python提供的处理时间标准库。time库提供系统级精确计时器的计时功能,可以用来分析程序性能,也可让程序暂停运行时间。
import time
print(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)'''
  • time库的功能主要分为3个方面:时间处理、时间格式化和计时。

• 时间处理主要包括4 个函数: time.tiem ( ) 、time.gmtime()、time.localtime() 、time.ctime()。

• 时间格式化主要包括3个函数:time.mktime()、time.strftime()、time.strptime()。

• 计时主要包括3 个函数: time.sleep ( ) 、time.monotonic()、time.perf_counter()

  • 使用time.time()获取当前时间戳
import time
print(time.time())
# 1516939876.6022282
  • 使用time.gmtime(secs)获取当前时间戳对应的struct_time对象
import time
print( time.gmtime(now))
'''
time.struct_time(tm_year=2020, 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(secs)获取当前时间戳对应的本地时间的struct_time对象
import time
print( time.localtime(now))
'''
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=26,
tm_hour=12, tm_min=11, tm_sec=16, tm_wday=4,
tm_yday=26, tm_isdst=0)'''
  • 注意结果与gmtime的区别,UTC时间已自动转换为北京时间。
  • 使用time.ctime(secs)获取当前时间戳对应的易读字符串表示,内部会调用time.localtime()函数以输出当地时间。
import time
print( time.ctime(now))
# 'Fri Jan 26 12:11:16 2020'
  • time库使用time.mktime()、time.strftime()、time.strptime()进行时间格式化。
  • 使用time.mktime(t) 将struct_time对象t转换为时间戳,注意t代表当地时间。struct_time对象的元素如下
下标属性
0tm_year年份,整数
1tm_mon月份[1, 12]
2tm_mday日期[1, 31]
3tm_hour小时[0, 23]
4tm_min分钟[0, 59]
5tm_sec秒[0, 61]
6tm_wday星期[0, 6](0表示星期一)
7tm_yday该年第几天[1, 366]
8tm_isdst是否夏时令,0否, 1是, -1未知
  • 调用time.mktime(t)函数
import time
t = time.localtime(now)
print( time.mktime(t))
# 1516939876.0
print( time.ctime(time.mktime(t)))
# 'Fri Jan 26 12:11:16 2020'
  • time.strftime()函数是时间格式化最有效的方法,几乎可以以任何通用格式输出时间。该方法利用一个格式字符串,对时间格式进行表达。
import time
lctime = time.localtime()
print( lctime)
'''
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=26,
tm_hour=12, tm_min=55, tm_sec=20, tm_wday=4, tm_yday=26,
tm_isdst=0)
'''
print( time.strftime("%Y-%m-%d %H:%M:%S", lctime))
# '2020-01-26 12:55:20'
  • strftime()方法的格式化控制符
格式化字符串日期/时间值范围和实例
%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
%S00 ~ 59,例如:26
  • strptime()方法与strftime()方法完全相反,用于提取字符串中时间来生成strut_time对象,可以很灵活的作为time模块的输入接口
import time
timeString = '2020-01-26 12:55:20'
print( time.strptime(timeString, "%Y-%m-%d %H:%M:%S"))
'''
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=26,
tm_hour=12, tm_min=55, tm_sec=20, tm_wday=4, tm_yday=26,
tm_isdst=-1)'''

4、time库与程序计时

  • 程序计时是非常常用的功能,尤其是对于运行时间较长的程序,往往需要先进行小规模(短时间)的实验,并根据实验结果预估最终程序的大致运行时间。
  • 程序计时主要要包含三个要素:程序开始/结束时间、程序运行总时间、程序各核心模块运行时间。
  • 下面以1千万次循环计时为例介绍程序计时的实现,并进一步理解time模块相关函数的运用。
  • 以1千万次循环为主体,模拟实际程序的核心模块,用time.sleep()来模拟实际程序的其他模块。
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

5、实例解析:雪景艺术绘图

  • turtle图形艺术,指利用turtle库画笔创造性绘制绚丽多彩艺术图形的过程。
  • turtle图形艺术效果中隐含着很多随机元素,如随机颜色、尺寸、位置和数量等。在图形艺术绘制中需要引入随机函数库random。常
  • 用randint()函数,生成指定范围内的随机数,
  • “雪景”图形艺术背景为黑色,分为上下两个区域,上方是漫天彩色雪花,下方是由远及近的灰色横线渐变。该图运用了随机元素,如雪花位置、颜色、大小、花瓣数目、地面灰色线条长度、线条位置等,需要使用turtle库和random库。
  • 绘制分为三个步骤

\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绘图了,最想绘制的图形是什么?最想送给谁?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/88281.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

优美而高效:解决服务器通信问题

题目背景 在这个问题中&#xff0c;我们面临着一幅服务器分布图。图中的每个单元格可能有服务器&#xff08;标记为1&#xff09;或者没有&#xff08;标记为0&#xff09;。我们的任务是找出能够与至少一台其他服务器进行通信的服务器数量。 算法思路 为了解决这个问题&…

linux并发服务器 —— 动态库和静态库实战(一)

-E 预处理指定源文件 -S 编译指定源文件 -c 汇编指定源文件 -o 生成可执行文件 -I directory 指定Include包含文件的搜索目录 -g 编译的时候生成调试信息 -D 在程序编译时指定一个宏 -w 不生成任何的警告信息 -Wall 生成所有警告 -On n:0~3&#xff1b;表示编译器的优…

使用yarn build 打包vue项目时静态文件或图片未打包成功

解决Vue项目使用yarn build打包时静态文件或图片未打包成功的问题 1. 检查vue.config.js文件 首先&#xff0c;我们需要检查项目根目录下的vue.config.js文件&#xff0c;该文件用于配置Vue项目的打包和构建选项。在这个文件中&#xff0c;我们需要确认是否正确地配置了打包输…

JUC初识

JUC 是什么 java.util.concurrent 在并发编程中使用的工具包 从线程start 开始 package com.jhj.Thread;public class ThreadDemo {public static void main(String[] args) {Thread t1 new Thread(() -> {}, "t1");t1.start();} }start 方法调的是native sta…

【Java alibabahutool】JSON、Map、实体对象间的相互转换

首先要知道三者的互转关系&#xff0c;可以先将JSON理解成是String类型。这篇博文主要是记录阿里巴巴的JSONObject的两个方法。toJSONString()以及parseObject()方法。顺便巩固Map与实体对象的转换技巧。 引入依赖 <!-- 阿里巴巴 JSON转换 以下二选一即可 没有去细研究两者…

SQL注入读写文件

文章目录 条件利用SQL注入漏洞读取hosts文件查看文件读写权限安全选项允许导入导出读取hosts文件 利用SQL注入漏洞写入一句话木马&#xff0c;并用蚁剑连接webshell写入文件 条件 SQL注入有直接SQL注入&#xff0c;也有文件读写时的注入&#xff0c;后者的主要 目的在于获取web…

缓存最佳实践

目录 前言 一、Cache Aside&#xff08;旁路缓存&#xff09;策略 二、不一致解决场景及解决方案 一、数据库主从不一致 二、缓存与数据库不一致 三、问题分析 三、缓存误用 一、多服务共用缓存实例 二、调用方缓存数据 三、缓存作为服务与服务之间传递数据的媒介 四…

python+tkinter实现多页面多菜单的demo实例

本篇文章主要讲解,python+tkinter多页面多菜单的demo实例,支持一个新窗口弹出、多页面切换,顶部菜单构建及事件绑定。 日期:2023年8月25日 版本:python3.9.6 实际效果 消息菜单-具体效果: 页面菜单具体效果: 事件菜单具体效果: 环境及依赖 python 3.9.6 依赖信息: …

WPF网格拖动自动布局效果

WPF网格拖动自动布局效果 使用Canvas和鼠标相关事件实现如下的效果: XAML代码: <Window x:Class="CanvasTest.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:

Python科研数据可视化

在过去的20 年中&#xff0c;随着社会产生数据的大量增加&#xff0c;对数据的理解、解释与决策的需求也随之增加。而固定不变是人类本身&#xff0c;所以我们的大脑必须学会理解这些日益增加的数据信息。所谓“一图胜千言”&#xff0c;对于数量、规模与复杂性不断增加的数据&…

LLMs对单个任务进行微调Fine-tuning on a single task

虽然LLM因其在单一模型内执行多种不同语言任务的能力而变得出名&#xff0c;但您的应用程序可能只需要执行单一任务。在这种情况下&#xff0c;您可以微调一个预训练的模型&#xff0c;以仅提高您感兴趣的任务的性能。例如&#xff0c;使用该任务的示例数据集进行摘要。有趣的是…

科技资讯|苹果Apple Watch新专利,可根据服装、表带更换表盘颜色

根据美国商标和专利局&#xff08;USPTO&#xff09;公示的清单&#xff0c;苹果公司近日获得了一项 Apple Watch 相关的技术专利&#xff0c;最大的亮点在于配备颜色采样传感器&#xff0c;可以根据表带、服装自动变幻变盘颜色和主题。 Apple Watch 正面配备颜色采样传感器&am…

【Maven教程】(三)基础使用篇:入门使用指南——POM编写、业务代码、测试代码、打包与运行、使用Archetype生成项目骨架~

Maven基础使用篇 1️⃣ 编写 POM2️⃣ 编写业务代码3️⃣ 编写测试代码4️⃣ 打包和运行5️⃣ 使用 Archetype生成项目骨架 1️⃣ 编写 POM 到目前为止&#xff0c;已经大概了解并安装好了Maven环境, 现在&#xff0c;我们开始创建一个最简单的 Hello World 项目。如果你是初次…

数据库第十五课-------------非关系型数据库----------Redis

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

基于 BEM 规范实现简单的全局 scss

该文章是在学习 小满vue3 课程的随堂记录示例均采用 <script setup>&#xff0c;且包含 typescript 的基础用法 前言 BEM 是 css 常用的命名规范BEM &#xff1a;block(块)、 element(元素)、 modify(修饰符)以 namespace-block__element、namespace-block---modify 格式…

如何更高效的写出更健全的代码,一篇文章教会你如何拥有一个良好的代码风格

前言&#xff1a;在平常的写代码的过程中&#xff0c;或多或少的遇到很多奇怪的 bug &#xff0c;尤其是一些大的程序&#xff0c;明明上一部分都是好好的&#xff0c;写下一块的时候突然多几百个 bug 的情况&#xff0c;然后这一块写完了后编译的时候直接傻眼了&#xff0c;看…

(学习笔记-调度算法)进程调度算法

进程调度算法也称 CPU 调度算法&#xff0c;毕竟进程是由 CPU 调度的。 当 CPU 空闲时&#xff0c;操作系统就选择内存中标的某个 [就绪状态] 的进程&#xff0c;将其分配给 CPU。 什么时候会发生CPU调度呢&#xff1f;通常有以下情况&#xff1a; 当进程从运行状态转换到等待…

使用 ChatGPT 创建 PowerPoint 演示文稿

让 ChatGPT 成为您的助手来帮助您编写电子邮件很简单,因为众所周知,它非常能够生成文本。很明显,ChatGPT 无法帮助您做饭。但您可能想知道它是否可以生成文本以外的其他内容。在上一篇文章中,您了解到 ChatGPT 只能通过中间语言为您生成图形。在这篇文章中,您将了解使用中…

【Leetcode】103.二叉树的锯齿形层序遍历

一、题目 1、题目描述 给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[20,9],[15,7]]示例2: 输入:root = [1] 输…

点亮社交新篇章:探索 WeTalk 新增的头像与群聊功能

目录 引言&#xff1a; 引入头像功能&#xff1a; 头像功能的优势&#xff1a; 引入群聊功能&#xff1a; 群聊功能的优势&#xff1a; 引入头像功能&#xff1a; 查看头像&#xff1a; ​编辑 上传头像&#xff1a; 引入群聊功能&#xff1a; 创建群聊&#xff1a…