- 方法论:Py语言数字及字符串类型
- 实践能力:初步掌握字符串操作
数据类型及操作
- 整数:十进制,二进制(0b/0B),八进制(0o/0O),十六进制(0x/0X) 无限制 。
- 浮点类型:取值范围和精度够用,浮点数间运算存在不确定尾数,不是bug。
53位二进制表示小数部分;0.1+0.2 == 0.3
False,使用round(x,d)
四舍五入。
<a>e<b>
:a*10的b次方。 - 复数 z.real;z.image
- 运算操作符
x/y 除,x与y之商10/3结果3.33333
x//y整数除,10//3结果3,%余数,x**y幂运算可开方
整数–》浮点数–》复数【扩展】 - 数值运算函数
abs(x);divmod(x,y),商余,(x//y,x%y)同时输出商和余数;pow(x,y[,z])幂余,(xy)%z**,[…]表示可省略
round(x,d),d默认0;max(a,b,c,d);min();**int()**取整,float(),complex()复数
实例3:天天向上的力量
pow(1.01,365)=37;pow(0.99,365)=0.03;
dayfactor=0.005
dayup=pow(1+dayfactor,365)
daydown=pow(1-dayfactor,365)
- 五天进步1%,2天退步1%
#DayDayUp.py
dayup=1.0
dayfactor = 0.01
for i in range(365)
if i % 7 in [6,0]:
dayup = dayup*(1-dayfactor)
else:
dayup = dayup*(1+dayfactor)
print("工作日力量:{:.2f}".format(dayup))# 4.63介于0.001和0.005进步之间
- 五天进步x%,2天退步1%,x多少赶上每天进步1%的人
#DayDayUpQ4.py
def dayUP(df):
dayup = 1
for i in range(365):
if i % 7 in [6,0]:
dayup = dayup*(1-0.01)
else:
dayup = dayup*(1+df)
return dayup
dayfactor = 0.01
while dayUP(dayfactor) < 37.78:
dayfactor += 0.001
print ("工作日努力:{:.3f}".format(dayfactor))#0.019,如果每天进步1.9%一年进步将是1000倍
- 我的思考 连续进步11个月 休息一个月---->结果是20倍 坚持努力 适当放松
#DayDayUp.py
dayup=1.0
dayfactor = 0.01
for i in range(335):
dayup = dayup*(1+dayfactor)
for i in range(30):
dayup = dayup*(1-dayfactor)
print("连续工作11个月:{:.2f}".format(dayup))
字符串类型及操作
- 字符串切片高级用法
<字符串>[M:N:K] 根据步长K对字符串切片,MN默认则至开头结尾
<字符串>[::-1] 实现字符串逆序 - 字符串操作符
x+y:连接字符串;x*n:赋值n次字符串x;x in s:如果x是s子串返回True - 字符串处理函数
len(x)
;str(x)
将数据转为字符串,与eval()函数功能相反;
hex(x)
,oct(x)
整数x转16/8进制;Unicode–chr(u)
—单字符—ord(x)
—Unicode; - Python字符串每个字符都是Unicode编码字符
十二星座
for i in range(12):
print(chr(9800+i),end="")#print 内参数end可设置换行
- 字符串处理方法
方法指<a>.<b>()
风格中的函数<b>()
,<a>
指对象,方法本身是与<a>
有关的函数
字符串及变量也是<a>
,存在方法
str.lower()
|str.upper()
大小写
str.split(sep)
根据sep分割
str.count(substr)
统计子串数目
str.replace(old,new)
替换
str.center(width[,fillchar])
str根据width居中,[…]内容表示可选,"p".center(3,"=")
得为'=3='
str.strip(chars)
从str中去掉左侧右侧chars中列出的字符"= python= ".strip(" =np")
得"ytho"
str.join(iter)
在iter变量除末尾元素外每个元素追加一个str,",".join("123")
得"1,2,3" - 字符串类型格式化
槽:"{1} is {0}".format("He","afused")
得afused is He,槽号可对应
:<填充><对齐><宽度>
引导符号|单个字符|左<右>上^|宽"{0:=^3}".format("p")
得'=p='
<,>
数字千位分隔符;<.>
浮点小数精度或子串最大输出长度;<类型>
整数:b,c,d,o,x,X,浮点数e,E,f,%
print("{0:=^20,.2%}".format(25555.55))
全部格式使用得===2,555,555.00%====
模块2 Time库使用
- time库是python处理时间的标准库,用于程序性能分析
时间获取
time.time()
获取从1970:00:00至今时间戳,浮点数
time.ctime()
获取易读字符串时间
time.gmtime
获取计算机可处理时间格式
时间格式化
strftime(tpl,ts)
tpl是格式化模板字符串,ts是计算机内部时间类型变量
import time
t = time.gmtime()
time.strftime("%Y-%m-%d %H:%M:%S",t)
#'2019-03-05 02:57:08'
%Y
年;%m
数字月;%B
月;%b
缩写;$d
;%A
星期;%a
缩写;%H
24时;%h
12时;%p
上下午;%M
分;%S
秒
strptime()
解析自定义的时间字符串
timeStr = '2019-03-05 02:57:08'
time.strptime(timeStr,"%Y-%m-%d %H:%M:%S")
程序计时
sleep()
休眠
def wait():
time.sleep(3.3)
wait()
perf_counter()
计时起点不确定,连续调用差值
start = time.perf_counter()
end = perf_counter()
end - start
实例4:文本进度条
- 单行动态刷新
刷新本质是用后打印的字符覆盖之前的字符
不能换行,控制print()
要能回退:打印后光标退回之前的位置 \r,IDLE屏蔽\r 用cmd等
import time
for i in range(101):
print("\r{:3}%".format(i),end="")
time.sleep(0.1)