第三章 基本数据类型
- 3.1 数字类型及操作
- 整数类型
- 浮点数类型
- 复数类型
- 数值运算操作符
- 数值运算函数
- 3.2 实例3:天天向上的力量
- 3.3 字符串类型及操作
- 字符串类型的表示
- 字符串操作符
- 字符串处理函数
- 字符串处理方法
- 字符串类型的格式化
- 3.4 模块2:time库的使用
- time库基本介绍
- 时间获取
- 时间格式化
- 程序计时应用
- 3.5 实例4:文本进度条
方法论
-Python语言数字及字符串类型
实践能力
-初步学会编程进行字符类操作
3.1 数字类型及操作
整数类型
与数学中整数的概念一致
-可正可负,没有取值范围限制
-pow(x, y)函数:计算xy,想算多大算多大
如:pow(2, 100)
4种进制表示形式
-十进制:1010,99,-217
-二进制,以0b或0B开头:0b010,-0B101
-八进制,以0o或0O开头:0o123,-0O456
-十六进制:以0x或0X开头:0x9a,-0X89
浮点数类型
与数学中实数的概念一致
-带有小数点及小数的数字
-浮点数取值范围和小数精度都存在限制,但常规计算可忽略
-取值范围数量级约-10308至10308,精度数量级10-16
浮点数间运算存在不确定尾数,不是bug
0.1 + 0.2 0.3000000000000000004
二进制表示小数,可以无限接近,但不完全相同
0.1 + 0.2 == 0.3 False
round (0.1 + 0.2, 1) == 0.3 True
-round (x, d):对x四舍五入,d是小数截取位数
-浮点数间运算及比较用round()函数辅助
-不确定尾数一般发生在10-16左右,round()十分有效
浮点数可以采用科学计数法表示
-使用字母E或e作为幂的符号,以10为基数,格式如下:
< a>e< b> 表示a*10b
-例如:4.3e-3,9.6E5
复数类型
与数学中复数的概念一致
z = a + bj
-z.real 获得实部a
-z.imag 获得虚部b
数值运算操作符
操作符是完成运算的一种符号体系
二元操作符有对应的增强赋值操作符
类型间可进行混合运算,生成结果为“最宽”类型
-三种类型存在一种逐渐“扩展”或“变宽”的关系:
整数 ->浮点数->复数
-例如:123 + 4.0 = 127.0 (整数+浮点数=浮点数)
数值运算函数
一些以函数形式提供的数值运算功能
3.2 实例3:天天向上的力量
基本问题:持续的价值
-一年365天,每天进步1%,累计进步多少呢?1.01365
-一年365天,每天退步1%,累计剩下多少呢?0.99365
-如果是“三天打鱼两天晒网”呢?
-如果是“双休日又不退步”呢?
问题1:1‰的力量
-一年365天,每天进步1‰,累计进步多少呢?1.001365
-一年365天,每天退步1‰,累计剩下多少呢?0.999365
#DayDayUpQ1.py
dayup = pow (1.001, 365)
daydown = pow (0.999, 365)
print ("向上:{:.2f}, 向下:{:.2f}".format(dayup, daydown))
问题2:5‰和1%的力量
-一年365天,每天进步5‰或1%,累计进步多少呢?1.005365,1.01365
-一年365天,每天退步5‰或1%,累计剩下多少呢?0.995365,0.99365
#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))
采用循环模拟365天的过程:抽象+自动化
问题4:工作日的努力
-工作日模式要努力到什么水平,才能与每天努力1%一样?
-A君:一年365天,每天进步1%,不停歇
-B君:一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
def…while…("笨办法"试错)
#DayDayUpQ4.py
def dayUP(df):
dayup = 1.0
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.38:
dayfactor += 0.001
print ("工作日的努力参数是:{:.3f}".format(dayfactor))
根据df参数计算工作日力量的函数;参数不同,这段代码可共用
def保留字用于定义函数
while保留字判断条件是否成立
条件成立时循环执行
运行结果:工作日的努力参数是0.019
GRIT:perseverance and passion for long-term goals
-GRIT,坚毅,对长期目标的持续激情及持久耐力
-GRIT是获得成功最重要的因素之一,牢记天天向上的力量
3.3 字符串类型及操作
字符串类型的表示
由0个或多个字符组成的有序字符序列
-字符串由一对单引号或一对双引号表示
“请输入"或者’C’
-字符串是字符的有序序列,可以对其中的字符进行索引
“请"是"请输入"的第0个字符
字符串有3类共4种表示方法
-由一对单引号或双引号表示,仅表示单行字符串
“请输入"或者’C’
-由一对三单引号或三双引号表示,可表示多行字符串
‘’’ Python
语言’‘’
-如果希望在字符串中包含双引号或单引号
'这里有个双引号(”)‘或者"这里有个单引号(’)”
-如果希望在字符串中既包含双引号又包括单引号
‘’'这里既有双引号(”)又有单引号(‘)’‘’
字符串的序号
使用[ ]获取字符串中一个或多个字符
-索引:返回字符串中单个字符<字符串>[M]
-切片:返回字符串中一段字符子串<字符串>[M: N]
使用[M: N: K]根据步长对字符串切片
-<字符串>[M: N],M缺失表示至开头,N缺失表示至结尾
‘0123456789’[:3]结果是’012’
-<字符串>[M: N: K],根据步长K对字符串切片
‘0123456789’[1:8:2]结果是’1357’
‘0123456789’[::-1]结果是’987643210’(字符串逆序)
*转义符*
-转义符表达特定字符的本意
“这里有个双引号(”)" 结果为:这里有个双引号(")
-转义符形成一些组合,表达一些不可打印的含义
"\b"回退 "\n"换行(光标移动到下行首) "\r"回车(光标移动到本行首)
字符串操作符
获取星期字符串
-输入:1-7的整数,表示星期几
-输出:输入整数对应的星期字符串
#WeekNamePrintV1.py
weekStr = "星期一星期二星期三星期四星期五星期六星期日"
weekId = eval(input('请输入星期数字(1-7):'))
pos = (weekId - 1) * 3
print(weekStr[pos: pos+3])
#WeekNamePrintV2.py
weekStr = "一二三四五六日"
weekId = eval(input('请输入星期数字(1-7):'))
print("星期" + weekStr[weekId-1])
字符串处理函数
一些以函数形式提供的字符串处理功能
Unicode编码
Python字符串的编码方式
Unicode和字符是一一对应的
-统一字符编码,即覆盖几乎所有字符的编码方式
-从0到1114111(0×10FFFF)空间,每个编码对应一个字符
-Python字符串中每个字符都是Unicode编码字符
字符串处理方法
“方法”在编程中是一个专有名词
-“方法”特指< a>.< b>()风格中的函数< b>()
-方法本身也是函数,但与< a>有关,< a>.< b>()风格使用
-字符串及变量也是< a>,存在一些方法
一些以方法形式提供的字符串处理功能
字符串类型的格式化
格式化是对字符串进行格式表达的方式
-字符串格式化使用.format()方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
槽
槽内部对格式化的配置方式
{<参数序号> : <格式控制标记>}
3.4 模块2:time库的使用
time库基本介绍
time库是Python中处理时间的标准库
-计算机时间的表达
-提供获取系统时间并格式化输出功能
-提供系统级精确计时功能,用于程序性能分析
import time
time.< b>()
time库包括三类函数
-时间获取:time(), ctime(), gmtime()
-时间格式化:strftime(), strptime()
-程序计时:sleep(), perf_counter()
时间获取
时间格式化
将时间以合理的方式展示出来
-格式化:类似字符串格式化,需要有展示模板
-展示模板由特定的格式化控制符组成
-strftime()方法
程序计时应用
程序计时应用广泛
-程序计时指测量起止动作所经历时间的过程
-测量时间:perf_counter()
-产生时间:sleep()
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
print(, end = " ") print输出最后增加一个end中表示的信息,不想换行,就输入一个空字符串
#TextProBarV2.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, "-")
进度条扩展
-在任何运行时间需要较长的程序中增加进度条
-在任何希望提高用户体验的应用中增加进度条
-进度条是人机交互的纽带之一