基本数据类型
3.1 数字类型及操作
3.1.1整数类型
与数学中整数的概念一致
- 可正可负,没有取值范围限制
- pow(x,y)函数:计算x的y次方,想算多大算多大
4种进制表示形式
- 十进制:1010,99,-217
- 二进制,以0b或0B开头:0b010,-0B101
- 八进制,以0o或0O开头:0o123,-0O456
- 十六进制,以0x或0X开头:0x9a,-0X89
3.1.2浮点数类型
与数学中实数的概念一致
- 带有小数点及小数的数字
- 浮点数取值范围和小数精度都存在限制,但常规计算可忽略
- 取值范围数量级约-10的308次方至10的308次方,精度数量级10的-16次方
浮点数间运算存在不确定尾数,不是bug
- round(x,d):对x四舍五入,d是小数截取位数
- 浮点数间运算及比较用round()函数辅助
- 不确定尾数一般发生在10的-16次方左右,round()十分有效
浮点数可以采用科学计数法表示
- 使用字母e或E作为幂的符号,以10为基数,格式如下:
< a >e< b > 表示 a*10的b次方
- 例如:4.3e-3 值为0.0043 9.6E5 值为960000.0
3.1.3复数类型
与数学中复数的概念一致
如果x的2次方 = -1,那么x的值是什么?
- 定义j = √(-1),以此为基础,构建数学体系
- a+bj被称为复数,其中,a是实部,b是虚部
复数实例
z = 1.23e-4+5.6e+89j
z.real 获得实部
z.imag 获得虚部
3.1.4数值运算操作符
操作符是完成运算的一种符号类型
二元操作符有对应的增强赋值操作符
类型间可进行混合运算,生成结果为“最宽”类型
- 三种类型存在一种逐渐“扩展”或“变宽”的关系:
整数 - >浮点数- >复数
- 例如:123 + 4.0 = 127.0 (整数 + 浮点数 = 浮点数)
3.1.5数值运算函数
一些以函数形式提供的数值运算功能
3.2 实例3:天天向上的力量
基本问题:持续的价值
- 一年365天,每天进步1%,累计进步多少呢?
1.01的365次方
- 一年365天,每天退步1%,累计剩下多少呢?
0.99的365次方
需求分析
- 数学公示可以求解,似乎没必要用程序
- 如果是“三天打鱼两天晒网”呢?
- 如果是“双休日又不退步”呢?
问题1:1%。(千分之一)的力量
- 一年365天,每天进步1%,累计进步多少呢?
1.001的365次方
- 一年365天,每天退步1%,累计剩下多少呢?
0.999的365次方
#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.005的365次方 1.01的365次方
- 一年365天,每天退步5%。或1%,累计剩下多少呢?
0.995的365次方 0.99的365次方
#DayDayUpQ2.py
dayfactor = 0.005
dayup = pow(1+dayfactor,365)
daydown = pow(1-dayfactor,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
引入变量dayfactor,其好处是:修改整体程序的一处代码即可
将dayfactor改为0.01
问题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))
问题4:工作日的努力
-
工作日模式要努力到什么水平,才能与每天努力1%一样
-
A君:一年365天,每天进步1%,不停歇
-
B君:一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
for…in…(计算思维)---->def…while…(”笨蛋法“,试错)
#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))
根据df参数计算工作日力量的函数
参数不同,这段代码可共用
def保留字用于定义函数
while保留字判断条件是否成立
条件成立时循环执行
工作日的努力参数是:0.019
工作日模式,每天要努力到1.9%,相当于365模式每天1%的一倍!
GRIT: perseverance and passion for long-term goals
1.01的365次方 = 37.78
1.019的365次方 = 962.89
- GRIT,坚毅,对长期目标的持续激情及持久耐力
- GRIT是获得成功最重要的因素之一,牢记天天向上的力量
3.3 字符串类型及操作
3.3.1字符串类型的表示
由0个或多个字符组成的有序字符序列
- 字符串由一对单引号或一对双引号表示
“请输入带有符号的温度值:”或者‘C’
- 字符串是字符的有序序列,可以对其中的字符进行索引
“请”是“请输入带有符号的温度值:”的第0个字符
字符串有 2类共4种 表示方法
- 由一对单引号或双引号表示,仅表示单行字符串
“请输入带有符号的温度值:”或者‘C’
- 由一对三单引号或三双引号表示,可表示多行字符串
‘’‘Python
语言 ‘’‘
- 如果希望在字符串中包含双引号或单引号呢?
‘这里有个双引号(“)’或者”这里有个单引号(‘)“
- 如果希望在字符串中既包括单引号又包括双引号呢?
’‘’这里既有单引号(‘)又有双引号(”)’‘’
使用[]获取字符串中一个或多个字符
- 索引:返回字符串中单个字符 <字符串>[M]
“请输入带有符号的温度值:[0]”或者TempStr[-1]
- 切片:返回字符串中一段字符子串 <字符串>[M:N]
“请输入带有符号的温度值:”[1:3]或者TempStr[0:-1]
使用[M:N:K]根据步长对字符串切片
- <字符串>[M:N],M缺失表示至开头,N缺失表示至结尾
“O一二三四五六七八九十“[:3]结果是”O一二“
- <字符串>[M:N:K],根据步长K对字符串切片
”O一二三四五六七八九十“[1:8:2]结果是"一三五七"
”O一二三四五六七八九十“[::-1]结果是"十九八七六五四三二一O"
转义符”\“
- 转义符表示特定字符的本意
”这里有个双引号(\”)“结果是这里有个双引号(")
- 转义符形成一些组合,表达一些不可打印的含义
“\b”回退 “\n”换行(光标移动到下行首) “\r”回车(光标移动到本行首)
3.3.2字符串操作符
由0个或多个字符组成的有序字符序列
获取星期字符串
- 输入:1-7的整数,表示星期几
- 输出:输入整数对应的星期字符串
- 例如:输入3,输出 星期三
#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])
3.3.3字符串处理函数
一些以函数形式提供的字符串处理功能
Unicode编码——Python字符串的编码方式
- 统一字符编码,即覆盖几乎所有字符的编码方式
- 从0到1114111(0x10FFFF)空间,每个编码对应一个字符
- Python字符串中每个字符都是Unicode编码字符
一些有趣的例子
>>> "1 + 1 = 2" + chr(10004)
>>> '1 + 1 = 2✔'
>>> for i in range(12):
>>> print(chr(9800 + i),end = "")
>>> ♈♉♊♋♌♍♎♏♐♑♒♓
>>> "金牛座字符的Unicode值是:" + str(ord("♉"))
>>> '金牛座字符的Unicode值是:9801'
3.3.4字符串处理方法
"方法"在编程中是一个专有名词
- ”方法“特指< a >.< b >()风格中的函数< b >()
- "方法"本身也是函数,但与< a >有关,< a >.< b >()风格使用
- 字符串及变量也是< a >,存在一些方法
一些以方法形式提供的字符串处理功能
3.3.5字符串类型的格式化
格式化是对字符串进行格式表达的方式
- 字符串格式化使用.format()方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
槽——相当于一对占位信息符
槽内部对格式化的配置方式
{<参数序号> : <格式控制标记>}
3.4 模块2:time库的使用
3.4.1time库基本介绍
time库是Python中处理时间的标准库
- 计算机时间的表达
- 提供获取系统时间并格式化输出功能
- 提供系统级精确计时功能,用于程序性能分析
import time
time.< b >()
time库包括三类函数
-
时间获取: time() ctime() gmtime()
-
时间格式化: strftime() strptime()
-
程序计时: sleep(), perf_counter()
3.4.2时间获取
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UcNQ7mgO-1665140657314)(C:/Users/86155/AppData/Roaming/Typora/typora-user-images/image-20221007155603682.png)]
3.4.3时间格式化
将时间以合理的方式展示出来
-
格式化:类似字符串格式化,需要有展示模板
-
展示模板由特定的格式化控制符组成
-
strftime()方法
格式化控制符
将字符串变成计算机可读的时间
3.4.4程序计时应用
程序计时应用广泛
- 程序计时指测量起止动作所经历时间的过程
- 测量时间:pref_counter()
- 产生时间:sleep()
3.5 实例4:文本进度条
3.5.1"文本进度条"问题分析
文本进度条
- 采用字符串方式打印可以动态变化的文本进度条
- 进度条需要能在一行中逐渐变化
如何获得文本进度条的变化时间
- 采用sleep()模拟一个持续的进度
- 似乎不那么难
3.5.2"文本进度条"简单的开始
#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.3"文本进度条"单行动态刷新
刷新的关键是\r
-
刷新的本质是:用之后打印的字符覆盖之前的字符
-
不能换行:print()需要被控制
-
要能回退:打印后光标退回到之前的位置\r
#TextProBarV2.py
import time
for i in range(101):
print("\r{:3}%".format(i),end="")
time.sleep(0.1)
IDLE屏蔽了\r功能
3.5.4"文本进度条"实例完整效果
#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.pref_counter() - start
print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
time.sleep(0.1)
print("\n"+"执行结束".center(scale//2,'-'))
个人学习记录会持续更新,不喜勿碰,如有指导建议,欢迎评论区留言,谢谢!!!