3.基本数据类型
3.1数据类型和操作
3.1.1 整数类型
与数学中整数概念一致
- 可正可负,没有取值范围
- pow(x,y)函数:计算x^y,想算多大算多大(
没有范围限制
)
pow(2,100) #2^100
pow(2,pow(2,15)
4种进制表示形式
- 十进制:1010 ,99 ,-217
- 二进制,以0b或0B(
零
)开头:0b010 ,-0B101 - 八进制,以0o或0O开头(
零o
):0o123 , -0O456 - 十六进制,以0x或0X开头:0x9a ,-0X89
3.1.2 浮点数类型
与数学中实数概念一致
- 如:12.34
- 浮点数取值范围和小数精度都存在限制(常规计算可忽略)
- 取值范围数量级约-10307 至10308 ,精度数量级10-16
存在不确定位数 一般在小数后16位才会产生
,不是BUG
>>>0.1+0.3
0.4
>>>0.1+0.2 #产生不确定位数
0.3000000004
>>>0.1+0.2
False
>>>round(0.1+0.2,1) == 0.3 # round函数,保留一位小数
>True
round(x,d):对x四舍五入,d是小数截取位数
- 浮点数间的运算与比较用 round() 辅助
浮点数可以采用科学计数法表示
- 使用e或E作为幂的符号,以10为基数,格式:
4.3e-3 表示:4.3*10-3
3.1.3复数类型
与数学中复数概念一致
- 定义
j
=sqrt(-1) ,相当于数学中虚部的i
- a+b
j
被称为复数,其中a是实部,b是虚部
z=1.23e-4+5.6e+89j
#相当于 1.23*10^-4+5.6*10^89i
z.real获得实部
z.image获得虚部
3.1.4数值运算操作符
操作符是完成运算的一种符号体系
3.1.5 数字类型的关系
类型间可进行混合运算,生成结果为“最宽”类型
- 三种类型存在一种逐渐变宽的关系
整数->浮点数->复数
(其中复数最宽) - 例如:123+4.0=127.0(整数+浮点数=浮点数)
3.1.6数值运算函数
3.2 实例3:天天向上的力量
3.2.1 问题1(每天0.001)
#daydayup01
dayup=pow(1.001,365)
daydown=pow(0.999,365)
print("向上:{:.2f} 向下:{:.2f}".format(dayup,daydown))
3.2.2问题2
使用一个变量:只要修改一处就行了
#daydayup02
dayfacter=0.005 #dayfacter=0.01
dayup=pow(1+dayfacter,365)
daydown=pow(1-dayfacter,365)
print("进步:{:.2f} 向下:{:.2f}".format(dayup,daydown))
3.2.3问题3
#daydayup03
dayfacter=0.01
dayup=1
for i in range(365):
if i%7 in [6,0]: #i%7=6或0的时候代表周末
dayup=dayup*(1-dayfacter)
else:
dayup=dayup*(1+dayfacter)
print("工作日的力量:{:.2f}".format(dayup))
3.2.4问题4
#daydayup04
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
# 上面的def到return是个函数,然后下面while中dayfacter的值传给df,
# 之后返回dayup进行判断,若返回值大于37.78,则结束循环,输出dayfacter
dayfacter=0.01
while dayUP(dayfacter)<37.78:
dayfacter+=0.001
print("工作日的努力参数:{:.3f}".format(dayfacter))
3.3字符串类型及操作
3.3.1 字符串类型的表示
由0个或多个字符组成的有序字符序列
- 字符串由一对单引号或一对双引号表示
"请输入带有字符的温度值:"
'c'
- 字符串是字符的有序序列,可以对其中的字符进行索引
“请”
是“请输入带有字符的温度值:”
的第0个字符
字符串有2类共4种 表示方法
- 一对单引号或双引号,仅表示单行字符串
- 一对三单引号或三双引号,表示多行字符串
'''python
语言'''
如果希望字符串中包含某种引号,
则在该字符串最外面加上与这种引号不同的其他引号
3.3.2字符串操作符
- 输入:1-7整数,表示星期几
- 输出:输入整数对应的星期字符串
- 例如:输入3,输出 星期三
weekstr = "星期一星期二星期三星期四星期五星期六星期日" #字符串下标从0开始
weekid = eval(input("请输入星期数字(1-7)"))
pos = (weekid-1)*3
print(weekstr[pos:pos+3])
优化:
weekstr = "一二三四五六日"
weekid = eval(input("请输入星期数字(1-7)"))
print("星期"+weekstr[weekid-1])
3.3.3 字符串处理函数
- python采取Unicode编码字符
实例:
print("1+1=2"+chr(10004))
print(chr(9801))
print("这个字符♉的Unicode值是:"+str(ord("♉")))
加号只能连接两个字符串,
若要正确,则在ord外面加str()或者加上一对单引号或双引号
for i in range(12):
print(chr(9800+i),end="")
3.3.4字符串处理方法
“方法”在编程中是一个专有名词
- 方法指 < a >.< b>()风格中
<b>()
- 方法本身也是函数,但与< a >有关
print("ABCinS".lower())
print("A,B,C".split(",")) #根据前面出现的,将字符串分割几个部分
print("an apple a inay".count('a')) #双引号也可以
print("python".replace("n","n123.io")) #字符串中所有n换成新字符
print("python".center(20,"=")) #共20字符,python居中,其他 = 填充
print("= python= ".strip(" np="))#删除字符串最外侧的字符,但不能越过字符删除
print(",".join("1234")) #给单个字符(1234)后面加 ,
3.3.5 字符串类型的格式化
格式化是对字符串进行格式表达的方式
- 字符串格式化使用
.format()
方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
槽
{ }
里数字顺序改变,则字符串的顺序就会改变
槽内部对格式化的配置方式
print("{0:=^20}".format("python"))
^ 表示居中,20 表示输出的宽度 =表示以=填充
这个输出语句表示将python1居中输出,并且其他用=填充,控制长度为20
print("{0:,.2f}".format(1234.5678))
, 表示数字的千位分隔符, .2f表示保留两位小数
c 表示字符形式输出
b 表示以二进制数
d 表示以十进制数
o 表示以八进制数
x 表示以小写十六进制数
X 表示以大写十六进制数
3.4 模块2:time库的使用
3.4.1time库基本介绍
time库是python中处理时间的标准库
time库包括三类函数
- 时间获取:time() ctime() gmtime()
- 时间格式化:strftime() strptime()
- 程序计时:sleep() perf_counter()
3.4.2时间获取
import time
t=time.ctime()
m=time.time()
e=time.gmtime()
print(t)#当前时间
print(m)#计算机内部时间
print(e)#当前时间且计算机可以理解
3.4.3时间格式化
将时间以合理的方式展示出来
- 格式化:类似字符串格式化,需要有展示模板
- 展示模板由特定的格式化控制符组成
- strftime()方法
import time
t=time.ctime()
m=time.time()
e=time.gmtime()
print(t)#当前时间
print(m)#计算机内部时间
print(e)#当前时间且计算机可以理解
i=time.strftime("%Y-%m-%d %H:%M:%S",e)
print(i)
3.4.4程序计时应用
- 程序计时指测量起止动作所经历时间的过程
- 测量时间:perf_counter()
- 产生时间:sleep()
import time
start = time.perf_counter()
print(start)
end = time.perf_counter()
print(end)
t=end-start
print(t)
3.5 实例4:文本进度条
需求分析
- 采取字符串方式打印可以动态变化的文本进度条
- 进度条需要能在一行中逐渐变化
获取文本进度条的变化时间
- 采取sleep()模拟一个持续的进度
3.5.1简单的开始
#TextProBarV1.py
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("........执行结束......")
3.5.2单行动态刷新
\r表示退回到行首
import time
for i in range(101):
print("\r{:3}%".format(i),end="")
time.sleep(0.1)
3.5.文本进度条实例完整效果
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}%[{}->{}s]".format(c,a,b,dur),end="")
time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-'))