3.3.2字符串操作符
- x + y +号连接两个字符串
- x * n 或n * x其中n为整数,代表将字符串x复制n次
- x in n 若x是字符串n的子串返回结果为TRUE,否则结果为False
- 输入1-7的整数,输出星期几。
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekId = eval(input("请输入1-7的整数:")) #input函数获取的为字符串类型,需要eval函数将双引号去掉
pos = (weekId - 1) * 3
print(weekStr[pos : pos+3])
上述代码中重复出现了星期,可以换成以下代码。
weekStr = "一二三四五六日"
weekId = eval(input("请输入1-7的整数:"))
pos = weekId - 1
print("星期" + weekStr[pos])
3.3.3字符串处理函数
- len(x):返回字符串x的长度。例len(“一2三”)结果为3
- str(x):将x转成对应的字符串形式。例str(1.2)结果为"1.2"。注意与eval函数区别,该函数是为任意类型加上双引号,而eval函数是去掉字符串的双引号改变数据类型。
- hex(x)或oct(x):整数x的十六进制或八进制小写形式。hex(425)结果为“0x1a9” oct(425)结果为"0o651"。
- chr(u):返回Unicode码中u对应的字符;ord(x):返回x对应的Unicode码。
- Unicode码:统一字符编码,与ASCLL码一样是Python字符串的编码方式
——覆盖几乎所有字符编码方式,可用来表示中文等不同国家文字字符
——从0到1114111(0x10FFFF)空间,每个编码对应一个字符
——Python字符串中每个字符都是Unicode编码字符 - 轻松一刻:我们可以利用Unicode码输出各种自己想要的字符,用下面两行代码就能输出12星座的符号。
for i in range(12):
print(chr(9800 + i), end="")#有end=""时一行输出
结果如图所示:
3.3.4字符串处理方法
- 方法是特指 < a >.< b >()风格中的函数< b >()。方法本身也是函数但与a有关,使用时< a >.< b >()。
- 字符串方法
方法 | 描述及实例 |
---|---|
str.lower() | 将字符串转成小写,“ABC”.lower()结果为"abc" |
str.upper() | 将字符串转成大写,“abc”.lower()结果为"ABC" |
str.split(sep=None) | 返回一个列表,str根据sep被分隔的部分组成。“A,B,C”.split(“,”)结果为[‘A’,‘B’,‘C’] |
str.strip(chars) | 只要头尾包含有指定字符序列中的字符就删除,“= python= “.strip(” =np”)结果为“ytho” |
str.count(sub) | 返回子串sub在str 中出现的次数,“an apple”.count(“a”)结果为2 |
str.replace(old , new) | 返回str副本,所有old子串被替换成new,“python”.replace(“n” , “n123.o”)结果为"python123.o" |
str.center(width [, fillchar]) | 字符串str居中,fillchar可选。“Python”.center(20 , “=”)结果“======= Python =======” |
str.join(iter) | 在iter变量除最后元素外每个元素后增加一个str,“,”.join(“12345”)结果为"1,2,3,4,5" |
3.3.5字符串类型的格式化
- 字符串通过槽和format函数实现格式化,槽用{}表示,使用方式:<字符串模板>.format(<逗号分隔的参数>)。
- 槽和format后的参数可以是相对应,也可更改。例如"{}:计算机的{}占{}%“.format(“2010-12-02”,“C”,10)。{}从左至右的下标为0,1,2 。format中参数从左至右标号也为0,1,2。当槽即{}中不填写下标时,format中参数与{}从左至右相对应。结果为2010-12-02:计算机的C占10%。若槽中填写下标,即”{1}:计算机的{0}占{2}%"结果为C:计算机的2010-12-02占10%。
- 槽内部格式化配置方式{<参数序号>:<格式控制标记>}。:为引导符
格式 | 说明及实例 |
---|---|
< 填充> | 用于填充单个字符 |
<对齐> | <:左对齐,>右对齐,^居中对齐 |
<宽度> | 槽设定的输出宽度 |
<,> | 数字千位分隔符 |
<.精度> | 浮点数小数精度或字符串最大输出长度 |
<类型> | 整数类型b,c,d,o,x,X 浮点数类型e,E,f,% |
例如"0:=^20".format(“PYTHON”)结果为PYTHON居中,20个字符,空字符用=代替
“======= PYTHON =======”。该实例用到了前三个填充,对齐,宽度。省略数字时"{:10}".format(“BIT”)默认左对齐,填充的是空格,宽度为10
“{0:,.2f}”.format(11223.123)结果为11,223.12用到了<,>和<.精度>
“{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}”.format(425)
b输出二进制形式,c输出Unicode码带代表的符号,d输出十进制形式,o输出八进制形式,x,X均输出十六进制形式,只是10—15用大写字母还是小写字母表示的区别。
3.4time库的使用
3.4.1time库基本介绍
——计算机的时间表达;
——提供获取系统时间并格式化输出功能
——提供系统级精确计时功能,用于程序性能分析。
使用方式:
import time
time.<b>()
- time库的三类函数
类型 | 函数名 |
---|---|
时间获取 | time() ctime() gtime() |
时间格式化 | strftime() strptime() |
程序计时 | sleep() , perf_counter() |
3.4.2时间获取
import time
time.time()#获取浮点类型自1970年至今的秒数
time.ctime()#获取字符串类型当前时间的易读方式
time.gtime()#获取计算机容易处理的时间类型
3.4.3时间格式化
- 格式化类似字符串格式化,需要展示模板。展示模板由特定格式化控制符组成。
- strftime()方法用来实现时间格式化,与strptime()方法对应。
函数 | 描述 |
---|---|
strftime(tpl,ts) | 参数tpl字符串类型,定义输出效果,ts为计算机内部时间类型变量。 |
strptime(timeStr,“%Y-%”) | – |
>>>import time
>>>t = time.gmtime()# gmtime是把日期和时间转换为格林威治(GMT)时间(英国格林威治市的时间)的函数
>>>time.strftime("%Y-%m-%d %H:%M:%S",t)
上面的代码能够正常输出结果
将上述代码写入file文件中时,如果不加print函数,则无任何输出。
import time
t = time.gmtime()
d = time.strftime("%Y-%m-%d %H:%M:%S",t)
print(d)
- 格式化字符串
格式化字符串 | 说明 |
---|---|
%Y | 年份,0000—9999,例如:1900 |
%B | 月份名称,January—December,如:April |
%b | 月份名称缩写,Jan—Dec,Apr |
%A | 星期,Monday—Sunday,如:Wednesday |
%a | 星期缩写,Mon~Sun,如Wed |
%H | 小时24小时制,00~23 |
%I | 小时12小时制,01-12 |
%p | 上/下午。AM,PM例如AM |
%M | 分钟,00~59 |
%S | 秒,00~59 |
- strptime()方法,与strftime()方法相对应。
语法格式 | 描述 |
---|---|
time.strptime(string[, format]) | 函数根据指定的格式把一个时间字符串解析为时间元组。 |
>>>import time
>>>timeStr = "2019-09-18 16:23:22"
>>>time.strptime(timeStr,"%Y-%m-%d %H:%M:%S")
#输出结果中,tm_isdst 是指传入的时间是否是 DST(夏令时),夏令时是指为了节约能源而人为设定时间
当上述代码写入文件中时,区别与上面的strftime类似。
- 计算机表达时间用的是浮点数。程序能理解的格式由gmtime函数获得struct_time,浮点数提取出的struct_time。字符串反格式化只在特定程序中使用。
3.4.4程序计时应用
- 程序计时应用广泛 ,包括测量时间和
- 测量时间:perf_counter(),获得精准的纳秒计算时间;产生时间函数:sleep()。
函数 | 描述 |
---|---|
perf_counter() | 返回CPU级别的精确时间计数值,单位为秒。计数值起点不从0开始,所以一次调用没用,连续调用差值才有意义 |
sleep(s) | 程序休眠s秒 |
>>>start = time.perf_counter()
>>>end = time.perf_counter()
>>>end - start
>>>def wait()
time.sleep(3.3)
>>>wait() #程序等待3.3秒后退出
3.5实例——文本进度条
1.简单的文本进度条
#TextProBarV1.py
import time
scale = 10 #scale指文本进度条的大致宽度
print("--------------执行开始--------------")
for i in range(scale+1):
a = '*'*i
b = '.'*(scale - i)
# c = (i/scale) * 100
c = i * 10
print("{:^3.0f}%[{}-->{}]".format(c,a,b))
print("---------------执行结束-------------")
- 文本进度条单行动态刷新
—刷新:后打印的字符覆盖之前的字符。
—输出时不能输出到下一行,print()要被控制。
—要能回退:打印后光标退回到之前位置\r
#TextProBarV2
import time
for i in range(101):
#为了输出文本进度条输出0%状态和%100状态
print("\r{:3f}%".format(i),end="") #end=""加上不换行,默认会换行,
time.sleep(0.1)
- 完整动态文本进度条
#TextProBar.py
import time
scale = 50
print("执行开始".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,'-'))
IDLE直接运行时,for循环中的print里面的\r没有起作用。需要在cmd命令行窗口下运行才能出现预期结果。