3.1数字类型及操作
1.整数类型
与数学中整数的概念一致
可正可负,没有取值范围限制
pow(x,y)函数:计算X的y次方,想算多大算多大
四种进制表现形式
十进制:1010,99,-217
二进制:以0b或0B开头:0b010,-0B101
八进制:以0o或0O开头:0o123,-0O456
十六进制:以0x或0X开头:0x9a,-0X89
整数无限制
2.浮点类型
与数学中实数的概念一致
带有小数点及小数的数字
浮点数取值范围和小数精度都存在限制,但常规计算可忽略
取值范围数量级约-10的308次方至10的308次方,精度数量级10的负16次方。
注意:浮点数间运算存在不确定尾数,不是bug
>>>0.1+0.3
0.4
>>>0.1+0.2
0.3000000000000004
原因:计算机中十进制小数0.1是由53位二进制表示的小数部分,约10^(-16)
二进制表示小数,可以无限接近,但不完全相同
修改:
>>>0.1+0.2==0.3
False
>>>round(0.1+0.2,1)==0.3
True
两个等号在Python中是判断的意思
round(x,d):对x四舍五入,d是小数截取位数
浮点数间运算及比较用round()函数辅助
不确定尾数一般发生在10^(-16)左右,round()十分有效
浮点数可以采用科学计数法表示
使用字母e或者E作为幂的符号,以10为基数,格式如下:
<a>e<b> 表示a*10^(b)
3.复数类型
定义j 与数学中复数概念一致
出现频率较少
4.数字运算操作符
x+y 加,x与y之和
x-y 减,x与y之差
x*y 乘,x与y之积
x/y 除,x与y之商
x//y 整数除,x与y之整数商 10//3结果是3
+x x本身
-y y的负值
x%y 余数,模运算 10%3结果是1
x**y 幂运算,x的y次幂,x^y
二元操作符有对应的增强赋值操作符
xop=y 即x=xopy,其中,op为二元操作符
类型间可进行混合运算,生成结果为“最宽”类型
三种类型存在一种逐渐“扩展”或“变宽”的关系
整数 ->浮点数 ->复数
数字运算函数
abs(x)
绝对值,x的绝对值
divmod(x,y)
商余,(x//y,x%y),同时输出商和余数。例:divmod(10,3)结果为(3,1)
pow(x,y[,z])
幂余,(x**y)%z,[..]表示参数z可省略。例:pow(3,pow(3,99),10000)结果为4587
round(x[,d])
四舍五入,d是保留小数位数,默认值为0
max(X1,X2,,,,,Xn)
最大值
mix(X1,X2,,,,Xn)
最小值
一些以函数形式提供的数值运算功能
int(x)
将x变成整数,舍弃小数部分
float(x)
将x变成浮点数,增加小数部分
complex(x)
将x变成复数,增加虚数部分
3.2实例3:天天向上的力量
基本问题:持续的价值
问题1:1‰的力量
#DayDayupQ1.py
dayup=(1.001,365)
daydown=pow(0.999,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
问题2:5‰和1%的力量
#DayDayUpQ2.py
dayfactor=0.005
dayup=pow(1+dayfactor,365)
daydown=pow(1-dayfactor,365)
print("向上:{:.2f},向下:{:.2f})"format(dayup,daydown))
问题3:工作日的力量
一年365天,一周5个工作日,每天进步1%
一年365天,一周2个休息日,每天退步1%
#DayDayUpQ3.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:工作日的努力
A君:一年365天,每天进步1%,不停歇
B君:一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
for...in..(计算思维)==>def..while...(“笨办法”试错)
#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))
3.3字符串类型及操作
由0个或多个字符组成的有序字符序列
字符串由一对单引号或一对双引号表示
字符串是字符的有序序列,可以对其;中的字符进行索引
字符串的序号
正向递增序号和反向递减序号
字符串切片高级用法
使用[M:N:K]根据步长对字符串切片
<字符串>[M:N],M缺失表示至开头,N缺失表示至结尾
<字符串>[M:N:K],根据步长K对字符串切片
字符串的特殊字符
转义符\
转义符表示特定字符的本意
转义符形成一些组合,表达一些不可打印的含义
字符串的操作符
由0个或多个字符组成的有序字符序列
操作符及使用
描述
x+y
连接两个字符串x和y
nx或xn
复制n次字符串x
x in s
如果x是s的子串,返回True,否则返回False
获取星期字符串
#weekNamePrintV1.py
weekStr="星期一星期二星期三星期四星期五星期六星期日"
weekId=eval(input("请输入星期数字(1-7):"))
pos=(weekId-1)*3
print(weekStr[pos:pos+3])
字符串处理函数
函数及使用|描述
len(x)|长度,返回字符串的长度
str(x)|任意类型x所对应的字符串形式
hex(x)或oct(x)|整数x的十六进制或八进制小写形式字符串
Unicode编码
python字符串的编码形式
统一字符编码,即覆盖几乎所有字符的编码方式
从0到1114111(0*10FFFF)的空间,每个编码对应一个字符
python字符串中每个字符都是Unicode编码字符
12星座代表字符
for i in range(12):
print(chr(9800+i),end="")
字符串处理方法
方法及使用
描述
str.lower或str.upper()
返回字符串的副本,全部字符小写/大写
str.split(sep=None)
返回一个列表,由str根据sep被分隔的部分组成
str.count(sub)
返回子串sub在str中出现的次数
str.replace(old,new)
返回字符串str副本,所有old子串被替代为new
str.center(width[,fillchar])
字符串str根据宽度width居中,fillchar可选
str.strip(chars)
从str中去掉在其左侧和右侧chars中列出的字符
str.join(iter)
在iter变量除最后元素外每个元素后增加一个str
字符串类型的格式化
格式化是对字符串进行格式表达的方式
字符串格式化使用.format()方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
: 引导符号
<填充> 用于填充的单个字符
<对齐> <左对齐 >右对齐 ^居中对齐
<宽度> 槽设定的输出宽度
<,> 数字的千位分隔符
<.精度> 浮点数小数精度或字符串最大输出长度
<类型> 整数类型 浮点数类型
3.4time库的使用
time库是python中处理时间的标准库
时间获取:time() ctime() gmtime()
时间格式化:strftime() strptime()
程序计时:sleep(),perf_counter()
函数
描述
time()
获取当前时间戳,即计算机内部时间值,浮点数
ctime()
获取当前时间并以易读方式表示,返回字符串
gmtime()
获取当前时间,表示为计算机可处理的时间格式
时间格式化
将时间以合理的方式展示出来
格式化:类似字符串格式化,需要有展示模板
展示模板由特定的格式化控制符组成
strftime()方法
函数
描述
strftime(tpl,ts)
tpl是格式化模板字符串,用来定义输出效果。ts是计算机内部时间类型的变量
strptime(str,tpl)
str是字符串形式的时间格式化。tpl是格式化模板字符串,用来定义输入效果
程序计时
程序计时指测量起止动作所经历事件的过程
测量时间:perf_counter()
产生时间:sleep()
函数
描述
per_counter()
返回一个CPU级别的精确时间计数值,单位为秒。由于这个计数值起点不确定,连续调用差值才有意义
sleep
s拟休眠时间,单位是秒,可以是浮点数
3.5文本计数条
需求分析
采用字符串方式打印可以动态变化的文本进度条
进度条需要能在一行中逐渐变化
问题分析
采用sleep()模拟一个持续的进度
似乎不那么难
“文本进度条”简单开始
#TextProBarV1.py
import time
scale=10
print("------执行开始------")
for i range(scale+1)
a='*' * 1
b='.' * (scale-i)
c=(i/scale)*100
print("{:^3.0f}%[{}->{}]".format(c,a,b))
time.sleep(0.1)
print("------执行结束------")
单行动态刷新
#TextProBarV2.py
import time
for i in range(101):
print("\r{:3}%".format(i),end="")
time.sleep(0.1)
完整效果
#TextProBarV3.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,'