Python基础【第三周】:字符串,time库,文本进度条
注明:本周主要讲一些数据类型,具体可见https://www.cnblogs.com/dadahuan/p/9564737.html
一些补充
案例展示:
具体字符串的方法可见https://www.cnblogs.com/dadahuan/articles/9471643.html
案例1:如果一周五个工作日,两个休息日,工作日进步,休息日退步0.01,要怎样努力才可以达到每天努力0.01的效果呢
分析:
程序:
1 #demo2.py 2 #创造一个方法day365(df):即工作日进步df,休息日退步0.01,一年后的数值 3 def day365(df): 4 dayup = 1 5 for i in range(365): 6 if i%7 in [0,6]: 7 dayup = dayup*(1-0.01) 8 else: 9 dayup = dayup*(1+df) 10 return dayup 11 12 #每天进步0.01, 13 day001= pow(1.01,365) 14 print("每天进步0.01,一年之后从1变成:{:.2f}".format(day001)) 15 df = 0.01 16 while day365(df) <day001: 17 df += 0.0001 18 print("当努力程度是{:.2f}时,一年后的数值为{:.2f}".format(df,day365(df)))
输出:
每天进步0.01,一年之后从1变成:37.78
当努力程度是0.02时,一年后的数值为37.87
注:关于函数定义可见https://www.cnblogs.com/dadahuan/articles/9480344.html
案例二:获取星期字符串
分析:用户输入1-7,输出星期一-七
代码:
1 weekId =eval( input("请输入星期数字(1-7): ")) 2 week = "一二三四五六日" 3 print("翻译:星期"+week[weekId-1])
输出:
1 请输入星期数字(1-7): 7 2 翻译:星期日
注:关于方法eval():将外层引号剥离,执行里面的语句。
1 a = "'abc'"#剥去外层双引号,运行结果为abc <class 'str'> 2 print(eval(a),type(a)) 3 b = '1+2' 4 print(eval(b))#剥去外层单引号,运行,结果为3
Unicode编码与字符串的转换:
python字符编码方式:
- 统一字符编码,即覆盖几乎所有字符的编码方式
- 从0到1114111 (0x10FFFF)空间,每个编码对应一个字符
- Python字符串中每个字符都是Unicode编码字符
函数及其使用:
chr(u):将Unicode编码转化为字符;
ord(x):将字符x转化为Unicode编码。
1 a,b,c,d= "k","o","b","e" 2 print(ord(a),ord(b),ord(c),ord(d)) 3 print(chr(31185),chr(27604))
1 107 111 98 101 2 科 比
time库及其使用
主要包括三类:
时间获取:time(),ctime(),gmtime()
时间格式化:strftime(),strptime()
程序计时:sleep(),perf_counter()
时间获取:
1 #方法·time(),获取当前时间戳,即计算机内部的时间,用浮点数表示 2 import time 3 print(time.time()) 4 #输出:1580689719.4108012 5 6 #ctime()获取当前时间并以易读方式表示,返回字符串 7 print(time.ctime()) 8 #输出:Mon Feb 3 08:30:25 2020 9 10 #gmtime()获取当前时间,表示为计算机可处理的时间格式 11 print(time.gmtime()) 12 #输出:time.struct_time(tm_year=2020, tm_mon=2, tm_mday=3, tm_hour=0, tm_min=34, tm_sec=9, tm_wday=0, tm_yday=34, tm_isdst=0)
时间格式化:将时间以合理的方式展现出来
类似字符串格式化,需要有展示模板,展示模板由特定的格式化控制符组成
1 #strftime(tpl, ts)函数tpl是格式化模板字符串,用来定义输出效果ts是计算机内部时间类型变量 2 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime())) 3 #输出:2020-02-03 01:10:10
注:PYTHON中tmie.gmtime()获取的时间为UTC时区(0时区)的struct_time,但是我们计算机显示的是东八区时间(+8),所以的得到的struct_time+8即为现在计算机显示的时间(按照所处不同时区计算)。
格式化控制:
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
时间格式化:产生时间变量
1 #方法strptime(string,format):第一个参数是时间字符串;第二个参数是时间格式 2 strtime = time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime()) 3 print(time.strptime(strtime,"%Y-%m-%d %H:%M:%S")) 4 #输出:time.struct_time(tm_year=2020, tm_mon=2, tm_mday=3, tm_hour=1, tm_min=53, tm_sec=52, tm_wday=0, tm_yday=34, tm_isdst=-1)
程序计时:程序计时指测量起止动作所经历时间的过程
perf_counter():返回一个CPU级别的精确时间计数值,单位为秒,由于这个计数值起点不确定,连续调用差值才有意义
1 start = time.perf_counter() 2 end = time.perf_counter() 3 print(start,end,end-start) 4 #输出:0.020443401 0.020444254 8.529999999985771e-07
sleep(s):s是输入的秒数,即程序休眠s秒。
1 print("程序休眠三秒") 2 time.sleep(3) 3 print("休眠结束")
文本进度条:
案例:采用字符串打印和sleep()设置进度条
1 import time 2 print("开始下载".center(20,"-")) 3 process = "[" + "-" * 10 + "]" 4 for i in range(11): 5 print("{}%".format(i * 10) + process) 6 lprocess = list(process) 7 lprocess[i+1] = '*' 8 process = ''.join(lprocess) 9 time.sleep(0.3)
输出:
--------开始下载-------- 0%[----------] 10%[*---------] 20%[**--------] 30%[***-------] 40%[****------] 50%[*****-----] 60%[******----] 70%[*******---] 80%[********--] 90%[*********-] 100%[**********]
Tips: 如果要改变字符串中一个字符要怎么做?
错误示范:
str1 = "123456" str1[1] = "#"
正确示范:
>>> s='abcdef' #原字符串 >>> s1=list(s) #将字符串转换为列表 >>> s1 ['a', 'b', 'c', 'd', 'e', 'f'] #列表的每一个元素为一个字符 >>> s1[4]='E' #将列表中的第5个字符修改为E >>> s1[5]='F' #将列表中的第5个字符修改为E >>> s1 ['a', 'b', 'c', 'd', 'E', 'F'] >>> s=''.join(s1) #用空串将列表中的所有字符重新连接为字符串 >>> s 'abcdEF' #新字符串
动态刷新进度条
样品展示:
1 import time 2 print("开始下载".center(20,"-")) 3 process = "[->" + "-" * 20 + "]" 4 for i in range(21): 5 print("\r{}%".format(i * 5) + process,end='') 6 lprocess = list(process) 7 lprocess[i + 1] = '*' 8 lprocess[i + 2] = '-' 9 lprocess[i+3] = '>' 10 process = ''.join(lprocess) 11 time.sleep(0.3) 12 print("\n"+"下载完成".center(20,"-"))
结果展示: