资讯专栏INFORMATION COLUMN

Python——基本数据类型(模块2: time库的使用)(实例3:文本进度条)

Jenny_Tong / 1118人阅读

摘要:前言本篇主要介绍基本数据类型,以文本进度条为例,介绍库的使用。

前言

本篇主要介绍基本数据类型,以文本进度条为例,介绍time库的使用。
并在最后对蟒蛇绘制的代码进行分析。
(从本篇开始,出现的一些库中函数介绍以及部分简单代码都将以图片形式呈现)

读完本篇,你将了解:
1.方法论
Python语言数字及字符串类型
2.实践能力
初步学会编程进行字符类操作

本篇将系统介绍:
1.数字类型及操作(整数、浮点数、复数及相关函数)
2.字符串类型及操作(字符串及字符串序号、操作函数、类型的格式化)
3.模块2: time库的使用(时间获取、格式化、程序计时应用)
4.实例3:文本进度条(简单开始->单行动态刷新->完整效果)

了解基本数据类型之后, 通过字符串、数字的组合,将能很容易的操作字符,使我们能更好的开展程序设计

一、数字类型及操作

1.整数类型

与数学中整数的概念一致,可正可负,没有取值范围限制
(1)pow(x,y)函数∶计算x的y次方,由于整数没有限制,想算多大算多大
(2)4种进制表示形式
①十进制:1010,99,-217
②二进制,以0b或0B开头:0b010,-OB101
③八进制,以0o或0O开头:0o123,-OO456
④十六进制,以0x或0X开头:0x9a,-0X89

2.浮点数类型

与数学中实数的概念一致,带有小数点及小数的数字
(1)注意:浮点数取值范围和小数精度都存在限制,但常规计算可忽略
取值范围数量级约-10^(308) 10^(308)
精度数量级:10^-16
(2)不确定尾数:浮点数间运算存在不确定尾数,不是bug
①举例:>>> 0.1 + 0.3输出0.4
>>> 0.1 +0.2输出0.30000000000000004
涉及到计算机对数字运算的内部实现原理
②原理:计算机中采用二进制表达数字,Python中采用53位二进制表示小数部分,约10^-16
由于计算机中的二进制跟十进制之间,不存在严格的对等关系,计算机只能截取53位,无限接近0.1
输出时只保留16位,之后的并未输出。故二进制与十进制之间转换出现不确定尾数
(3)round(x, d):对x四舍五入,d是小数截取位数
①浮点数间运算及比较用round()函数辅助
②不确定尾数一般发生在10^-16左右,round()十分有效
(4)科学计数法
①格式:使用字母e或E作为幂的符号,以10为基数,格式如下:
(a)e(b)表示a*10b
②例如∶4.3e-3 值为0.0043或9.6E5值为960000.0

3.复数(仅Python提供)

与数学中复数的概念一致
(1)定义j=√(-1),以此为基础,构建数学体系
(2)a+bj被称为复数,其中,a是实部,b是虚部
(3)z.real获得实部、z.imag获得虚部
(4)客观说常规编程中很少使用,但是它却是进行空间变换,尤其是跟复变函数相关的科学体系中最常用的一种类型

4.数字类型及操作

操作符是完成运算的一种符号体系
(1)一些基础操作符

注意:/的结果保留小数

(2)对二元操作符的增强型操作符

(3)数字类型的关系
类型间可进行混合运算,生成结果为"最宽"类型
①三种类型存在一种逐渐"扩展"或"变宽"的关系∶
整数->浮点数->复数
②例如:123 +4.0 = 127.0 (整数+浮点数=浮点数)

5.数值运算函数

(1)Python提供的一些函数

(2)数字类型转换函数

二、字符串类型及操作

1.字符串类型的表示

(1)字符串:
由0个或多个字符组成的有序字符序列
①字符串由一对单引号或一对双引号表示:"请输入带有符号的温度值: "或’C’
②字符串是字符的有序序列,可以对其中的字符进行索引(从0开始)
如:"请"是"请输入带有符号的温度值:”的第O个字符

(2)字符串有2类共4种表示方法
①由一对单引号或双引号表示,仅表示单行字符串
如:“请输入带有符号的温度值: “或’℃’
②由一对三单引号或三双引号表示,可表示多行字符串(作用而言,也可当作注释使用)
‘’’ Python
语言‘’‘
③如果希望在字符串中包含双引号或单引号呢?
若字符串中出现双引号,那么最外层的引号就要使用单引号,反之
如:"这里有个双引号(”)‘或者"这里有个单引号(’)”
④如果希望在字符串中既包括单引号又包括双引号呢?
则用三个单引号表示
如:’‘’这里既有单引号(’)又有双引号(")‘’‘
⑤故这4种方法存在冗余,使得字符串中出现单引号或者双引号的处理更方便简单

(3)字符串的序号
正向递增序号和反向递减序号

①使用[ ]获取字符串中一个或多个字符
1)索引∶返回字符串中单个字符 <字符串>[M]
"请输入带有符号的温度值: "[0]或者TempStr[-1]
2)切片:返回字符串中一段字符子串 <字符串>[M: N]
“请输入带有符号的温度值:”[1:3]或者TempStr[0:-1]
(这里之前说过,不再多作赘述)

②字符串切片的高级用法
使用[M: N:K]根据步长对字符串切片
1)<字符串>[M: N],M缺失表示至开头,N缺失表示至结尾
如:“o一二三四五六七八九十”[:3]结果是"O一二"(从最开始到3前一个为止)
2)<字符串>[M: N: K],根据步长K对字符串切片
“o一二三四五六七八九十”[1:8:2]结果是"一三五七"(从第一位置到第八位置前结束,步长为2取)
3)小技巧:将字符串逆序[::-1]
“o一二三四五六七八九十”[::-1]结果是"十九八七六五四三二一o"
(从最开始到结尾,步长-1(即从后向前逐一取出),相当于逆序)

③转义符
1)转义符表达特定字符的本意
“这里有个双引号(”)”结果为:这里有个双引号(")
2)转义符形成一些组合,表达一些不可打印的含义
如:"/b"回退“ /n"换行(光标移动到下行首)“ /r”回车(光标移动到本行首)

2.字符串操作符

(1)由0个或多个字符组成的有序字符序列

(2)举例:获取星期字符串
输入∶1-7的整数,表示星期几
输出∶输入整数对应的星期字符串
例如∶输入3,输出星期三

weekStr = "星期一星期二星期三星期四星期五星期六星期日"weekId = eval(input("请输入星期数字(1-7):"))pos = (weekId-1)*3  # 算出起始索引的位置print(weekStr[pos:pos+3]) # 使用切片操作,将切片结果返回给用户

利用操作符改进

weekStr = "一二三四五六日"weekId = eval(input("请输入星期数字(1-7):"))print("星期"+weekStr[weekId-1])

3.字符串处理函数

(1)一些以函数形式提供的字符串处理功能

str和eval是一对对应的函数

这两个函数也是一对对应函数
(2)Unicode编码
Python字符串的编码方式
①统一字符编码,即覆盖几乎所有字符的编码方式
②从0到1114111(Ox10FFFF)空间,每个编码对应一个字符
③Python字符串中每个字符都是Unicode编码字符,使得Python程序不限于中文英文韩文日文俄文等
④一些有趣的例子:
>>> "1 +1 = 2 " +chr( 10004)输出’1 +1 = 2 √’

4.字符串处理方法

(1)方法
"方法"在编程中是一个专有名词
①"方法"特指(a).(b)风格中的函数b()
②方法本身也是函数,但与a有关,是a能提供的函数,必须a.b()风格使用(面向对象的一种使用风格)
③字符串及变量也是a,存在一些方法

(2)8个常用方法(字符串及变量也是a,存在一些方法)


①split()函数:例子中用逗号分隔字符串,即只要出现逗号就会把字符串拆解为两个部分
故A后的逗号就会将A多带带形成一个字符串,B同样。然后将他们放成一个列表类型返回给用户
②center()函数:(对字符串格式进行处理)根据width居中,居中后剩余两侧填充为fillchar(使打印规则的输出处理简易)
③strip()函数:去除字符串左右两侧预定义字符

5.字符串类型的格式化

格式化是对字符串进行格式表达的方式
(1)字符串格式化使用.format()方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
(2)槽
相当于一个占位信息符,它使用一对{}来表示,只在字符串中有用
①举例

1)每一个槽中所要添加的内容与.format方法中对应的参数相一致
2)槽的3个顺序在不指定的情况下默认为012
3)将format方法中的参数按照对应顺序填到模板字符串的槽中
4)进一步可在槽中指定需要添加的参数的位置

(3)Python语言使用槽机制加上format方法,来形成字符串的格式化
除参数序号之外,如果某一个槽中确定关联的某一个参数,可以对参数的输出格式进行控制。
在槽内部使用格式化的控制标记来进行格式控制

(4)format()方法的格式控制
①槽内部对格式化的配置方式
通过一个冒号来引导一些参数,控制某一个变量在槽位置的输出格式
Python一共提供了六种格式控制标记

分为两组记忆
②前三个参数为一组,这三个参数分别表达填充、对齐和宽度
基本模式:
1)给出一个输出宽度
2)决定即将输出的这个参数在这个宽度中的对齐方式
3)确定对齐方式之后,若还有空余空间,该填充什么字符
首先要给定填充,其次设定对齐,最后设定宽度
4)举例

第一个例子中:
在一个模板字符串中,槽中给出“:=^20”。=指填充符号,空余空间中填=的单字符
^表明居中对齐(>指右对齐)指的是所放入槽中的format方法中的第0个参数以居中对齐方式来显示
20指输出宽度
第三个例子中:
省略填充、对齐,直接给出宽度。默认情况下填充为空格,变量左对齐

③后三个都是与具体的数字有关(控制数字类型输出)
1)<,>:数字的千位分隔符(这种情况只有在输出字符串,但是当作数字给人阅读的时候才会使用)
2)<.精度>:浮点数小数精度或字符串最大输出长度
3)<类型>:我们以什么样的类型将变量放到槽中
4)举例

第一个例子中:
.2f表示保留两位小数并使用千位分隔符
第二个例子中:
对425以:b的形式输出二进制格式,以:c的形式输出字符形式(即Unicode编码形式)
以:d的形式输出十进制格式, 以:o的形式输出八进制格式
以:x的形式输出十六进制格式, 以:X的形式输出大写十六进制格式
第三个例子中:
以:e的形式采用科学计数法e形式表示浮点数, 以:E的形式采用科学计数法E形式表示浮点数,
以:f的形式采用通常的非科学计数法表示浮点数, 以:%的形式采用百分号形式表示浮点数。

三、time库的使用

1.time库基本介绍

(1)time库是Python中处理时间的标准库
①计算机时间的表达
②提供获取系统时间并格式化输出功能
③提供系统级精确计时功能,用于程序性能分析

(2)使用方法:
import time
time.b()
以此调用相关函数(最典型最直接Python库的使用方法)

(3)time库包括三类函数
①时间获取:time() ctime() gmtime()
②时间格式化并输出: strftime() strptime()
③程序计时(time库的重要功能): sleep(), perf_counter()

2.时间获取

(1)一些函数

①时间戳是一个很长的浮点数,表示从1970年1月1日0:00开始,到当前这一时刻为止的,一个以秒为单位的数值
②ctime():给出一个具体的时分秒的时间(time库中获取人类译读方式时间的最简单的函数)

③gmtime():获取当前时间,但获取后生成的格式不一样,生成的是一种计算机程序可以处理的时间格式
(2)这三个函数基本能对获取来的时间做所有可能的后续处理

3.时间格式化

将时间以合理的方式展示出来
(1)格式化
①格式化:类似字符串格式化,需要有展示模板
②展示模板由特定的格式化控制符组成(告诉程序输出的时间大概是什么样子)
③实现时间格式化的方法:strftime()方法
(2)strftime()

(3)时间格式化很重要的一点
将计算机内部时间中,表达的年月日时分秒等相关的与时间有关的信息,用一种变量的形式进行合理组合,并合理输出
通过控制来表达输出格式
(4)time库中的控制符
格式:%+字母

(可回顾刚刚的例子)

(5)strptime()

将一个字符串变成一个计算机内部可操作的一个时间(特定程序中才会使用)

4.程序计时应用

(1)程序计时应用广泛
①程序计时指测量起止动作所经历时间的过程
②测量时间: perf_counter()(获取计算机中CPU以其频率运行的时钟,往往以纳秒来计算,非常精准)
③产生时间: sleep()(让程序休眠或产生一定时间)

(2)perf_counter()

(3)sleep()

四、实例4:文本进度条

1.需求分析

(1)文本进度条
①采用字符串方式打印可以动态变化的文本进度条
②进度条需要能在一行中根据程序的运行逐渐变化(与时间有一定关系)
(2)如何获得文本进度条的变化时间?
采用sleep()模拟一个持续的进度

2.“文本进度条“简单的开始

(1)代码实现

# TextProBarV1import timescale = 10print("------执行开始------")for i in range(scale+1):    a = "*" * i    b = "." * (scale-i)    c = (i/scale)*100    print("{:3.0f}%[{}->{}]".format(c, a, b))    time.sleep(0.1)print("------执行结束------")

①该代码完成了一个基本的文本进度条框架
②执行效果:生成一个有开始、结束标记,且有一定进度百分比表示的进度条格式

(2)代码简单分析
①引入time库,使用time库的sleep()函数来生成一个持续不断的时间
②打印“执行开始”“执行结束”作为标签
③定义变量scale=10,指文本进度条的大概的宽度
④for循环模拟进度:for i in range(n)结构
⑤基本原理:定义休眠时间,每次循环都会打印当前进度条状态,进行一个简单的休眠
⑥for循环中的相关工作:
1)a等于字符(乘号)与循环变量i的乘积(字符串与整数的乘积表示字符串被复制的次数)
指当前百分比所表达的信息
2)b等于’."与当前剩余的进度条的比例之间的乘积
3)a与b构成当前进度比例中,与已经执行的和未知执行的之间的对应的(星号)和‘."两者之间的关系
4)变量c等于i除以scale乘以100,输出与当前进度条与进度相关的百分比
⑦print函数设置三个槽,在每个槽中增加了百分比以及相应字符串
⑧指向效果如上图

3.“文本进度条“单行动态刷新

(1)单行动态刷新:
刷新的关键是/r
①刷新的本质是:用后打印的字符覆盖之前的字符
②不能换行:print()需要被控制(print()默认输出之后会换行到下一行)
③要能回退:需要让打印后光标退回到之前的位置/r(输出字符串之后,光标会移动到字符串之后)
(2)代码实现

# TextProBarV1import timefor i in range(101):    print("/r{:3}%".format(i), end="")    time.sleep(0.1)

①使用time库及sleep()函数,101次的循环(0%到100%)
②代码关键:print函数
输出信息之后,增加,end=""这样一个参数,可以改变每一次print输出最后增加的那个信息
比如在这里我们使end赋值为空字符串,那么print函数每一次输出字符串之后,不会增加换行
只会把光标停留在当次输出字符串的后面
③总结:若希望输出的字符串后面增加什么信息,就在end参数中增加,不希望增加换行,使end赋值为空字符串
④print的第一个参数:/r,一个槽,并给出百分号
/r:打印输出之前,它能够使光标退回到当前行的行首

4.“文本进度条“实例完整效果

(1)代码实现

# TextProBarV3import timescale = 50print("执行开始".center(scale//2, "-"))start = time.perf_counter()for i in range(scale+1):    a = "*" * i    b = "." * (scale - i)    c = (i / scale) * 100    dur = time.perf_counter() - start    print("/r{:3.0f}%[{}->{}]{:.2f}s".format(c, a, b, dur), end="")    time.sleep(0.1)print("/n"+"执行结束".center(scale//2, "-"))

(2)代码分析
与第一段代码很接近,重点分析修改
①第一个和最后一个print,center函数用-填充在两侧
②增加计时效果:对程序进度有更好的展示(程序运行开始变量start开始时间)
③for循环:保留abc变量,新增dur变量记录每一次需要打印文本进度条时所消耗的时间,当前时间减去最开始记录的时间
④for中的print函数:打印文本进度条
1)单行刷新效果:最开始增加/r,实现光标向行首的移动
2)同时print函数要增加end参数,end赋值为空字符串:每次输出之后不换行
(3)效果:具有一定格式框架,有进度“*”输出,又有时间记录的完整的文本进度条
(4)这段代码覆盖了字符串处理,覆盖了数字处理,时间库的使用
效果如图

5.“文本进度条“举一反三

(1)计算问题扩展
①文本进度条程序使用了perf_counter()计时
②计时方法适合各类需要统计时间的计算问题
③例如︰比较不同算法时间、统计部分程序运行时间
(2)进度条扩展
①在任何运行时间需要较长的程序中增加进度条
②在任何希望提高用户体验的应用中增加进度条
③进度条是人机交互的纽带之一
(3)文本进度条的不同设计函数(作扩展用)

总结

经过本篇的学习,可以大致掌握运用time库去实现基本的文本进度条(本篇只是基础),大家可以尝试不同的进度条设计风格。善于使用time库函数来抓取时间。
如有错误,欢迎指正!
注:代码非原创
下篇将介绍程序的控制结构。
ps(又咕咕了)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/119817.html

相关文章

  • 图解——PyQt4从入门到运用

    摘要:将程序包装在界面里,可以将输入通过多种途径如文本框弹出路径选择等输入到程序里。将输出通过文本框显示出来将执行信息如如报错信息运行进度通过文本框或进度条显示出来文章安排先介绍安装和配合的使用。 作为一个程序的开发者,我们仅仅需要在相应路径通过命令行就可执行那个程序。但是,不懂行的人不理解这个黑框框的东西,陌生领域任何人都没有安全感,所以他们是拒绝接受一个项目仅仅只是通过一个黑框框来执行的...

    史占广 评论0 收藏0
  • 大前端公共知识杂谈

    摘要:尽管面向对象编程也有着很多其他被人诟病的地方,但是在大型复杂业务逻辑的应用开发中我们还是会倾向使用面向对象编程的范式这就要求我们对于类与对象的基本语法有所掌握。 大前端公共知识杂谈首发于InfoQ-架构师特刊:大前端,是笔者对于泛前端知识图谱(Web/iOS/Android/RN) 的文字版介绍,夹杂了 GUI 应用程序架构的十年变迁:MVC、MVP、MVVM、Unidirection...

    CODING 评论0 收藏0
  • Python3网络爬虫实战---29、解析库的使用:BeautifulSoup

    摘要:解析器在解析的时候实际上是依赖于解析器的,它除了支持标准库中的解析器,还支持一些第三方的解析器比如,下面我们对支持的解析器及它们的一些优缺点做一个简单的对比。 上一篇文章:Python3网络爬虫实战---28、解析库的使用:XPath下一篇文章:Python3网络爬虫实战---30、解析库的使用:PyQuery 前面我们介绍了正则表达式的相关用法,但是一旦正则写的有问题,可能得到的就...

    MockingBird 评论0 收藏0
  • Python 小白从零开始 PyQt5 项目实战(4)基本控件

    摘要:本系列面向小白,从零开始实战解说应用进行的项目实战。本文介绍通过工具栏创建常用的基本控件,包括各种按钮控件文本输入控件和调节输入控件。是主窗口大小拉伸后,控件对象的最小尺寸最大尺寸。 ...

    Awbeci 评论0 收藏0
  • JavaScript 资源大全中文版

    摘要:官网全新的静态包管理器。官网一个整合和官网的最佳思想,使开发者能快速方便地组织和编写前端代码的下一代包管理器。官网小巧的兼容的所见即所得的富文本编辑器。官网富文本编辑器。官网由制作,适用于每天写作的富文本编辑器。 1. 包管理器 管理着 javascript 库,并提供读取和打包它们的工具。 npm:npm 是 javascript 的包管理器。官网 cnpm:cnpm 是 由于国...

    jzman 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<