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,"-"))

结果展示:

 

 

 

 

 

 

posted @ 2020-02-03 12:11  焕熊  阅读(355)  评论(0编辑  收藏  举报