Python基本数据类型
数字类型及操作
一、整数类型
-可正可负,没有取值范围限制
-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开头:0o123, -0O456
-十六进制,以0x或0X开头:0x9a,-0X89
浮点类型
与数学中实数的概念一致
-带有小数点及小数的数字
-浮点数取值范围和小数精度都存在限制,但常规计算可忽略
-取值范围数量级约-10的308次方至10的308次方,精度数量级10的-16次方
浮点数间运算存在
不确定尾数
,不是bug
print(0.1+0.2==0.3) #False
print(round(0.1+0.2, 1)==0.3) #True
#round(x, d) : 对x四舍五入,d是小数截取位数
浮点数可以采用科学计数法表示
-使用字母e或E作为幂的符号,以10为基数,格式如下:
e
表示 a*10^b
二、复数类型
与数学中复数的概念一致
三、数字类型及操作
类型间可进行混合运算,生成结果为**“最宽”类型**
-三种类型存在一种逐渐“扩展”或“变宽”的关系:
整数->浮点数->复数
四、天天向上的力量
dayup = pow(1.001, 365)
daydown = pow(0.999, 365)
print("向上:{:.2f}, 向下:{:.2f}".format(dayup, daydown))
使用变量的好处:一处修改即可
dayfactor=0.005
dayup = pow(1+dayfactor, 365)
daydown = pow(1-dayfactor, 365)
print("向上:{:.2f}, 向下:{:.2f}".format(dayup, daydown))
工作日的力量
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
工作日的努力
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
def…while…(“笨办法”试错)
-判断条件循环、次数循环、分支、函数、计算思维
字符串类型及操作
-字符串类型的表示
-字符串操作符
-字符串处理函数
-字符串处理方法
-字符串类型的格式化
一、字符串类型的表示
由0个或多个字符组成的有序字符序列
-字符串由一对单引号或一对双引号表示
“请输入带有符号的温度值:”或者‘C’
-字符串是字符的有序序列,可以对其中的字符进行索引
“请”是“请输入带有符号的温度值:”的第0个字符
字符串有2类共四种表示方法
-由一对单引号或双引号表示,仅表示单行字符串
-由一对三单引号或三双引号表示,可表示多行字符串
'''Python
语言'''
三单引号没有赋给某个变量或者进行任何操作,可以当做注释使用
字符串的序号
转义符
二、字符串操作符
获取星期字符串
#WeekNamePrintV1.py
weekStr="星期一星期二星期三星期四星期五星期六星期日"
weekId=eval(input("请输入星期数字(1-7):"))
pos=(weekId-1)*3
print(weekStr[pos: pos+3])
输出:
三、字符串处理函数
一些以函数形式提供的字符串处理功能
len(x)——长度,返回字符串x的长度
len("一二三456")结果为6
str(x)——任意类型x所对应的字符串形式
str(1.23)结果为"1.23"
str([1,2])结果为"[1,2]"
hex(x)或oct(x)——整数x的十六进制或八进制小写形式字符串
hex(425)结果为"0x1a9"
oct(425)结果为"0o651"
chr(u)——u为Unicode编码,返回其对应的字符
ord(x)——x为字符,返回其对应的Unicode编码
Unicode和字符是一一对应的
Unicode编码
Python字符串的编码方式
-统一字符编码,即覆盖几乎所有字符的编码方式
for j in range(12):
print(chr(9800+j), end=" ")
输出:
四、字符串处理方法
“方法”在编程中是一个专有名词
-“方法”特指a.b()风格中的函数b()
-方法本身也是函数,但与a有关,a.b()风格使用
-a.b()是面向对象的一种风格
一些以方法形式提供的字符串处理功能
str.lower()或str.upper()——返回字符串的副本,全部字符小写/大写
"AbCdEfGh".lower() 结果为"abcdefgh"
str.split(sep=None)——返回一个列表,由str根据sep被分隔的部分组成
"A,B,C".split(",") 结果为['A', 'B', 'c']
str.count(sub)——返回子串sub在str中出现的次数
"an apple a day".count("a") 结果为4
str.replace(old, new)——返回字符串str副本,所有old子串被替换为new
"python".replace("n", "n123.io") 结果为"python123.io"
str.center(width[,fillchar])——字符串srt根据宽度width居中,fillchar可选
"python".center(20, "=") 结果为'=======python======='
str.strip(chars)——从str中去掉在其左侧和右侧chars中列出的字符
"= python= ".strip(" =np") 结果为"ytho"
str.join(iter)——在iter变量除最后元素外每个元素后增加一个str
",".join("12345") 结果为"1,2,3,4,5" #主要用于字符串分隔符
五、字符串类型的格式化
格式化是对字符串进行格式表达的方式
-字符串格式化使用.format()方法,用法如下:
.format()
槽
相当于一个占位信息符,用一对大括号表示
"{0:=^20}".format("PYTHON")
'=======PYTHON======='
"{0:*>20}".format("BIT")
'*****************BIT'
"{:10}".format("BIT")
'BIT ' #默认左对齐,用空格来填充
"{0:,.2f}".format(12345.6789)
'12,345.68'
"{0:b},{0:c},{0:d},{0:o},{0:X}".format(425)
time库的使用
-time库基本介绍
-时间获取
-时间格式化
-程序计时应用
time库是Python中处理时间的标准库
-计算机时间的表达
-提供获取系统时间并格式化输出功能
-提供系统级精确计时功能,用于程序性能分析
import time
time.()
time库包括三类函数
-时间获取:time() ctime() gmtime()
-时间格式化:strftime() strptime()
-程序计时:sleep() perf_counter()
time()——获取当前时间戳,即计算机内部时间值,浮点数
time.time()
1603177836.2044587
ctime()——获取当前时间并以易读方式表示,返回字符串
time.ctime()
'Tue Oct 20 15:12:20 2020'
gmtime()——获取当前时间,表示为计算机可处理的时间格式
time.gmtime()
time.struct_time(tm_year=2020, tm_mon=10, tm_mday=20, tm_hour=7, tm_min=14, tm_sec=2, tm_wday=1, tm_yday=294, tm_isdst=0)
时间格式化——将时间以合理的方式展示出来
-格式化:类似字符串格式化,需要有展示模板
-展示模板由特定的格式化控制符组成
-strftime()方法
strftime(tpl, ts)——tpl是格式化模板字符串,用来定义输出效果
ts是计算机内部时间类型变量
t=time.gmtime()
time.strftime("%Y-%m-%d %H:%M:%S", t)
'2020-10-20 07:22:33'
strptime(str, tpl)——str是字符串形式的时间值,tpl是格式化模板字符串,用来定义输入效果
timeStr='2018-01-26 12:55:20'
time.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=26, tm_hour=12, tm_min=55, tm_sec=20, tm_wday=4, tm_yday=26, tm_isdst=-1)
程序计时应用广泛——
-程序计时指测量起止动作所经历时间的过程
-程序计时主要包括:测量时间和产生时间两部分
-测量时间:perf_counter()
-产生时间:sleep()
perf_counter()——返回一个CPU级别的精确时间计数值,单位为秒
由于这个计数值起点不确定,连续调用差值才有意义
start=time.perf_counter()
0.0633938
end=time.perf_counter()
0.0633949
end-start
1.1000000000038757e-06
sleep(s)——s拟休眠的时间,单位是秒,可以是浮点数
def wait(): #定义函数
time.sleep(3.3)
wait() #程序将等待/休眠3.3秒后再退出
文本进度条
-采用字符串方式打印可以动态变化的文本进度条
-进度条需要能在一行中逐渐变化
-采用sleep()模拟一个持续的进度
#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("------执行结束------")
------执行开始------
0 %[->..........]
10 %[*->.........]
20 %[**->........]
30 %[***->.......]
40 %[****->......]
50 %[*****->.....]
60 %[******->....]
70 %[*******->...]
80 %[********->..]
90 %[*********->.]
100%[**********->]
------执行结束------
文本进度条单行动态刷新
-刷新的本质是:用后打印的字符覆盖之前的字符
-不能换行:print()需要被控制
-不能回退:打印后光标退回到之前的位置\r
刷新的关键是\r
单行动态刷新
#TextProBarV1.py
import time
for i in range(101):
print("\r{:3}%".format(i), end="")#默认在输出之后换行,end=""则输出之后不换行
time.sleep(0.1)
实例4:文本进度条
#TextProBarV1.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,'-'))
举一反三
计算问题扩展
-文本进度条程序使用了perf_counter()计时
-计时方法适合各类需要统计时间的计算问题
-例如:比较不同算法时间、统计部分程序运行时间
进度条扩展
-在任何运行时间需要较长的程序中增加进度条
-在任何希望提高用户体验的应用中增加进度条
-进度条是人机交互的纽带之一