3.1数字类型及操作
①整数类型:与数学中的整数概念一致
- 十进制
- 二进制:以0B或0b开头
- 八进制:以0o或0O开头
- 十六进制:以0x或0X开头
②浮点数类型:与数学中实数的概念一致
- 与整数不同的是:浮点数取值范围和小数精度都存在限制,但常规计算可以忽略不计
- 存在不确定尾数,即0.1+0.2输出0.30000000000000000004 (原因是因为计算机的存储是二进制,而二进制和十进制之间存在不严格的对等关系)
- 浮点数间运算和比较,用
Round
。Round(x,d):对x四舍五入,d是小数截取位数
- 可以采用科学计数法表示,e/E代表10为基数的幂
③复数类型: 只有python语言提供了复数类型!!!a+bj
- 进行空间变换以及复变函数体系中使用
数字类型间可以进行混合运算,生成结果为最宽/最扩展的类型
数值运算操作符号
数值运算函数:内置函数
3.2 实例
工作日努力1%,休息日下降1%,每周双休,那么一年365天可以进步多少呢?
dayfactor = 0.01
daydayup = 1
# 采用的计算思维:for...in...结构
for i in range(365):
if i % 7 in [5,6]:
daydayup = daydayup * (1-dayfactor)
else:
daydayup = daydayup * (1+dayfactor)
print("每周休息两天的全年进步:{:.2f}".format(daydayup))
相比与每天都努力1%来说,要在工作日努力多少才能和每天努力1%一样呢?
# 利用计算机的笨方法思维,定义一个函数来找到工作日的努力效率
def factor(daydayup,B,dayfactor):
b = 0.01
while daydayup < B:
b = b + 0.001
daydayup = 1
##############################################
for i in range(365):
if i % 7 in [6,0]:
daydayup = daydayup* (1-dayfactor)
else:
daydayup = daydayup * (1+b)
###############################################################
return b
dayfactor = 0.01
daydayup = 1
everyday = daydayup * pow((1+dayfactor),365)
b = factor(daydayup,everyday,dayfactor)
print("工作日的努力参数是:{:.3f}".format(b))
注意:
- ①循环结构中的包含关系!!!每个循环部分包含的是比自己空格数更多且相同的程序,对齐的话就不是循环部分里面的了,而是循环结尾后下一步的操作
② 每次对新参数b计算时,daydayup要重置为1,而不是0!!!!
③循环结构中,参数b = b + 0.001的位置要注意,如果是放置在循环体最后,那么当while满足条件后,我们会多加一次,得到的不是真是的b值
下图是源程序
3.3 字符串类型及操作
字符串两类四种表达方式:
- 单行字符串:双或单引号" "/’ ’
- 多行字符串:三双或单引号 ‘’’ ‘’’/""" “”"
- 如果字符串中有双引号或单引号:双引号外用单引号,单引号外用双引号
- 如果字符中既有双引号又有单引号:用三单引号
字符串序号:
- 正向递增序号:0 1 2 …
- 反向递增序号:-1,-2
- 索引
str[m]
- 切片
str[M:N:K]
,k—步长
特殊字符:
转义符\
:转义符后面的符号表达字符的本意- \b回退 , \n换行 ,\r回车
字符串处理函数:
Unicode编码:它是Python字符串的编码方式
- 统一字符编码,每个编码对应一个字符
0~1114111(0x10FFFF)空间
典型的字符串处理方法:
+
+
方法:
①方法特指<a>.<b>()
风格中的函数<b>()
,方法的使用必须要加一个点.
②本身也是函数,但与<a>
有关
③在面向对象编程中,<a>
其实是对象,<b>
是对象所提供的功能,也叫方法
字符串类型的格式化:槽机制和.format方法
- 格式化是对字符串进行格式表达的方式:
<模板字符串>.format(<逗号分隔的参数>)
- 槽{ }:表示占位符,只在字符串中有用,槽中可以调整参数序号。eg:1 0 2
- format()方法的格式控制:
{<参数序号>:<格式控制标记>}
,其中冒号:
后面的格式控制标记具体内容如下:-
填充、对齐、宽度:
{0:=^20}.format("PYTHON")
-
-
逗号
<:,>
、精度<:.精度>
、类型:,
是数字的千位分隔符
类型:b
—二进制,:c
—Unicode编码,:d
—十进制,:o
—八进制,:x
—十六进制,:X
—大写的十六进制 -
-
3.4 time库的使用
time库是python中处理时间的标准库;time库包含三类函数,调用的时候是time.<b>
①时间获取:time() / ctime() / gmtime()
时间戳:从1970.01.01到现在时间的总秒数
②时间格式化:strftime() / strptime()
:这两个是一个互补关系,前者将时间转为字符串;后者将给出的字符串转为时间
time库中有很多控制符,都是以%+一个字母
的形式来表达的
③程序计时:sleep() / perf_counter()
:程序运行到结束的时间
3.5实例:文本进度条
文本进度条的多行动态显示:
import time
scale = 10 # 文本条进度的宽度
print("------执行开始------")
for i in range(scale+1):
a = '*' * i
b = '.' * (scale-i)
c = (i/scale)*100
print("{:^3.0f}%[{}->{}]".format(c,a,b))
time.sleep(0.1) # 休眠时间,计算机每次输出进度条时暂停一会儿
print("------执行结束------")
文本进度条的单行动态刷新:
- 刷新:用后打印的字符覆盖之前的字符
- 不能换行:print()函数需要被控制,则回退\r
import time
for i in range(101):
print('\r{:3}%'.format(i),end="") #\r退到行首,,end=""不换行
time.sleep(0.1)
整合上面两个得到的文本进度条的动态刷新:
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,"-"))
举一反三:比较不同算法的时间、程序运行时间、在人机交互中增加进度条(比如,计算机下载了90%的时候显示只下载了10%)