【Python基础学习】3.基本数据类型
主要参考来源:慕课嵩天老师的“Python语言程序设计”[https://www.icourse163.org/course/BIT-268001?tid=1468130447]
3.1数据类型及其操作
- 整数类型(对应数学中的整数)
pow(x,y)表示x的y次方
十进制(和普通整数一致,可正可负,正常表示)
二进制(0b或0B开头,例如0b010,-0B101)
八进制(0o或0O开头)
十六进制(0x或0X开头) - 浮点数类型(对应数学中的实数)
浮点数间运算存在不确定尾数(二进制和十进制不严格对应)
round(x,d):对x四舍五入,d是小数截取位数
不确定尾数一般发生在1e-16
浮点数用科学计数法表示:aeb表示a*10的b次方,e也可写为E - 复数类型(对应数学中的复数)
z.real获得实部,z.imag获得虚部 - 数值运算操作符
//整除,%取余,俩*幂运算
二元操作符op:例如,x+=y,x%=y,x**=y
类型间可进行混合运算,生成结果为“最宽”类型 - 数值运算函数
| 函数及使用 | 描述 |
|---|---|
| abs(x) | 绝对值 |
| divmod(x,y) | 商余,(x//y,x%y),同时输出商和余数 |
| pow(x,y[,z]) | 幂余,(x**y)%z,[..]表示参数z可省略 |
| round(x[,d]) | 四舍五入 |
| max(x1,x2,...,xn) | 最大值,n不限 |
| min(x1,x2,...,xn) | 最小值,n不限 |
| int(x) | 将x变成整数,舍弃小数部分 |
| float(x) | 将x变成浮点数,增加小数部分 |
| complex(x) | 将x变成复数,增加虚数部分 |
3.2实例3:天天向上的力量
Q1:千分之1的力量
#DayDayUpQ1.py
dayup = pow(1.001,365)
daydown = pow(0.999,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
#结果为 向上:1.44,向下:0.69
Q2:千分之五的力量
#DayDayUpQ2.py
dayfactor = 0.005
dayup = pow(1+dayfactor,365)
daydown = pow(1-dayfactor,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
#结果为 向上:6.17,向下:0.16
Q3:工作日的力量
#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.63
Q4:工作日的努力
#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
GRIT:perseverance and passion for long-term goals
GRIT,坚毅,对长期目标的持续激情及持久耐力
GRIT是获得成功最重要因素之一,牢记天天向上的力量
3.3字符串类型及操作
字符串类型的表示:
字符串是字符的有序序列,可对其中的字符进行索引。
一对单引号或一对双引号,仅表示单行字符串
一对三单引号或三双引号表示,可表示多行字符串
索引和切片
切片中若起始位置缺失表示至开头,终止位置缺失表示至结尾
根据步长K对字符串切片:
"〇一二三四五六七八九十"[1:8:2]结果为"一三五七"
"〇一二三四五六七八九十"[::-1]结果为"十九八七六五四三二一〇"
转义符\,表达特定字符的本意,或者形成一些组合,表达一些不可打印的含义,例如,“\b”回退,“\n”换行,“\r”回车
字符串操作符:
| 操作符及使用 | 描述 |
|---|---|
| x + y | 连接字符串 |
| nx或xn | 复制n次字符串x |
| x in s | 若x为s的子串,返回True,否则False |
字符串处理函数:
| 函数及使用 | 描述 |
|---|---|
| len(x) | 长度,返回字符串长度 |
| str(x) | 任意类型x所对应的字符串形式 |
| hex(x)或oct(x) | 整数x的十六进制或八进制小写形式字符串 |
| chr(x) | x为Unicode编码,返回其对应的字符 |
| ord(x) | x为字符,返回其对应的Unicode编码 |
字符串处理方法:
“方法”特指<a>.<b>()风格中的函数<b>()
方法本身也是函数,但与<a>有关
|方法及使用|描述|
|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(<逗号分割的参数>)
槽:
“{}:计算机{}的CPU占有率为{}%”.format("2018-10-10","C",10)
0、1、2为默认顺序
也可进行指定,{}中分别填入1、0、2,则对应“C”,"2018-10-10",10
槽内部对格式化的配置方式:{<参数序号>:<格式控制标记>}
| : | <填充> | <对齐> | <宽度> | <,> | <.精度> | <类型> |
|---|---|---|---|---|---|---|
| 引导符号 | 用于填充的单个字符 | <左对齐,>右对齐,^居中对齐 | 槽设定的输出宽度 | 数字的千位分隔符 | 浮点数小数精度或字符串最大输出长度 | 整数类型b,c,d,o,x,X 浮点数类型e,E,f,% |
3.4模块2:time库的使用
time库基本介绍
time库是Python中处理时间的标准库
时间获取:time(),ctime(),gmtime()
时间格式化:strftime(),strptime()
程序计时:sleep(),perf_time()
时间获取
|函数|描述|
|time()|获取当前时间戳,即计算机内部时间值,浮点数|
|ctime()|获取当前时间并以易读方式表示,返回字符串|
|gmtime()|获取当前时间,表示为计算机可处理的时间格式|
时间格式化
格式化:类似字符串格式化,需要有展示模板
展示模板由特定的格式化控制符组成
| 函数 | 描述 |
|---|---|
| strftime(tpl,ts) | tpl是格式化模板字符串,用来定义输出效果 ts是计算机内部时间类型变量 |
| 格式化字符串 | 日期/时间说明 | 值范围和实例 |
|---|---|---|
| %Y | 年份 | 0000到9999 |
| %m | 月份 | 01到12 |
| %B | 月份名称 | January到December |
| %b | 月份名称缩写 | Jan到Dec |
| %d | 日期 | 01到31 |
| %A | 星期 | Monday到Sunday |
| %a | 星期缩写 | Mon到Sun |
| %H | 小时(24h制) | 00到23 |
| %I | 小时(12h制) | 01到12 |
| %p | 上/下午 | AM,PM |
| %M | 分钟 | 00到59 |
| %S | 秒 | 00到59 |
| 函数 | 描述 |
|---|---|
| strfptime(str,tpl) | str是字符串形式的时间值,tpl是格式化模板字符串,用来定义输入效果 |
程序计时应用
程序计时指测量起止动作所经历时间的过程
测量时间:perf_counter()
产生时间:sleep()
| 函数 | 描述 |
|---|---|
| perf_counter() | 返回一个CPU级别的精确时间计数值,单位为秒 由于此计数值起点不确定,连续调用差值才有意义 |
| sleep(s) | s拟休眠的时间,单位为秒,可以是浮点数 |
3.5实例4:文本进度条
“文本进度条”问题分析:
文本进度条:
采用字符串方式打印可以动态变化的文本进度条
进度条能在一行内逐渐变化
采用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("------执行结束------")
“文本进度条”单行动态刷新:
刷新的关键是:\r
刷新的本质:用之后打印的字符覆盖之前的字符
不能换行:print()需要被控制
要能回退:打印后光标退回到之前的位置\r
#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,'-'))
“文本进度条”举一反三:
计算问题扩展
进度条应用
文本进度条的不同设计函数

例如使用Fast Power函数:
#TextProBar.py
import time
scale = 100
print("执行开始".center(scale//2,'-'))
i = 0
m = 0
start = time.perf_counter()
for i in range(scale + 1):
m = int(pow((i/scale+1)/2,8)*scale) #使用了Fast Power设计函数
a = '*' * m
b = '.' * (scale - m)
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,'-'))

浙公网安备 33010602011771号