开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情
-3.1 数字类型及操作
整数类型
- 与数学中整数的概念一致
- 可正可负,没有取值范围限制
- pow(X,Y)函数:计算x的y次方,想算多大算多大
- 例如pow(2,100)就是2的100次方。pow(2,pow(2,15))=>2的2的15次方
四种进制
- 二进制(0b或0B),八进制(0o或0O),十进制,十六进制(0X或0x)
浮点类型
-
与数学中实数的概念一致
- 带有小数点....
- 浮点数取值范围和小数精度都存在限制,但常规计算可以忽略
- 取值范围数量级约-10的308次方到10的308次方,精度数量级为10的-16次方
- 浮点运算中存在不确定尾数,不是bug:0.1+0.2=0.3000.....4
- round(x,d):对x四舍五入,d是小数截取位数
- 浮点数间运算及比较使用round()函数辅助
复数类型
-
与数学中负数的概念一致
-
-
z = 1.23e-4+5.6e+89j
- 实部是什么?z.real获得实部
- 虚部是什么?z.imag获得虚部
数值运算操作符
-
加减乘除是一样的
-
整数除 x//y,x与y之整数商,10//3结果是3 x本身 +x -y y的负值 x%y 取余 x**y 幂运算,x的y次幂(次方)。当y是小数时,开方运算10**0.5结果是根号10 类型间可以进行混合运算,生成结果为"最宽"类型
-
三种类型存在一种逐渐"扩展"或"变宽"的关系:
- 整数->浮点数->复数
- 整数加浮点数=浮点数
一些以函数形式提供的数值运算功能
函数及使用 描述 abs(x) 绝对值,x的绝对值abs(-10.01)结果为10.01 divmod(x,y) 商余,(x//y,x%y),同时输出商和余数。divmod(10,3)结果为(3,1) pow(x,y[,z]) 幂余,(x**y)%z,[..]表示参数z可省略。pow(3,pow(3,99),10000)结果为4587。z是余操作 round(x[,d]) 四舍五入,d是保留小鼠位数,默认值为0,round(-10.123,2)结果为-10.12 max(x1,x2,x3...) 最大值,返回x1,x2,x3...xn中的最大值,n不限,max(1,9,5,4 3)结果为9 min(x1,x2,x3...) 最小值,返回x1,x2,x3...xn中的最大值,n不限,max(1,9,5,4 3)结果为1 int(x) 将x变成整数,舍弃小数部分。int(123.45)结果为123 complex(x) 将x变成复数,增加虚数部分。complex(4),结果为4+0j 二元增强赋值操作符
-
-3.2 实例3:天天向上的力量
一年365天,每天进步1%,累计进步多少?1.01的365次方
一年365天,每天退步1%,累计退步多少?0.99的365次方
问题1:1%的力量
#DayDayUpQ1.py
dayup = pow(1.001,365)
daydown = pow(0.999,365)
print("向上:{:.2f},向下:{:.2f}".format(dayup,daydown))
问题2:5%。和1%的力量
一年365天,每天进步5%或1%,累计进步多少呢?
一年365天,每天退步5%或1%,累计退步多少呢?
#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))
问题4:工作日的努力
-工作日模式要努力到什么水平,才能与每天努力1%一样?
A君:一年365天,每天进步1%,不停歇
B君:一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
for..in..(计算思维)=>def ...while("笨方法试错")
#DayDayUpQ4.py
def dayUP(df):#def是保留字,df表示dayfactor
dayup = 1#天天向上的初始值设置为1
for i in range(365):
if i % 7 in [6,0]:
dayup = dayup * (1 - 0.01)
else:
dayup = dayup *(1 + df)
return dayup
#根据df参数计算工作日力量的函数,参数不同,这段代码可以共用,def保留字用于定义函数
dayfactor = 0.01
while dayUP(dayfactor) < 37.78:
dayfactor += 0.001
print("工作日的努力参数是:{:.3f}".format(dayfactor))
#while保留字判断条件是否成立,条件成立时循环执行
工作日模式,每天需要努力到1.9%,相当于365模式每天1%的一倍!
-3.3 字符串类型及操作
-
字符是有序序列,可以根据索引取得对应的值,索引从0开始
-
字符串的2类4种表示方法
- -单引号或双引号
- 由一对三单引号或三双引号表示,可表示多行字符串(作用可以当作注释)
- 字符串中出现单引号跟双引号如果想直接当字符串使用,可以使用三单引号或三双引号来包裹
-
使用[]获取字符串中一个或多个字符
- 索引:返回字符串中单个字符 <字符串>[M]
- TempStr[-1]
字符串切片高级用法
-
使用[M:N:K]根据步长对字符串切片
-
<字符串>[M,N],M缺失表示至开头,N缺失表示至结尾
- “0123456789”[:3]的结果是"012"
-
<字符串>[M:N:K],根据步长K对字符串切片
- “0123456789”[1:8:2]的结果是1357
- "0123456789"[::-1]结果是"9876543210"
转义符\
字符串操作符
| 操作符及使用 | 描述 |
|---|---|
| x + y | 连接两个字符串x和y |
| n * x或x * n | 复制n次字符串x |
| x in s | 如果x是s的子串,返回True,否则返回False |
获取星期字符串
#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])
字符串处理函数
一些以函数形式提供的字符串处理功能
| 函数及使用 | 描述 |
|---|---|
| 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编码
-
Python字符串的编码方式
- 统一字符编码,即覆盖几乎所有字符的编码方式
- 从0到1114111(0x10FFFF)空间,每个编码对应一个字符
字符串处理方法
"方法"在编程中是一个专有名词
字符串处理方法
一些以方法形式提供的字符串处理功能
| 方法及使用 | 描述 |
|---|---|
| str.lower()或str.supper | 返回字符串的副本,全部字符小写/大写 |
| 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]) | 字符串str根据宽度width居中,fillchar可选"python".center(20,"=")结果为'=======python======' |
| str.strip(char) | 从str中去掉在其左侧和右侧chars中列出的字符"= python=".strip(" =np")结果为"ytho" |
| str.join(iter) | 在iter变量除最后元素外每个元素后增加一个str",".join("12345")结果为"1,2,3,45,5"#主要用于字符串分隔等 |
字符串类型的格式化
格式化是对字符串进行格式表达的方式
-
-字符串格式化使用.format()方法,用法如下
-
<模板字符串>.format(<逗号分隔的参数>)
-
默认情况:
-
也可以自己指定对应:
-
上述是python的槽机制
-
format()方法的格式控制
-
槽内部对格式化的配置方式 {<参数序号>:<格式控制标记>} -
、
-
-
对应的输出格式
-
b 二进制格式 c 字符形式 d 十进制 o 八进制 x 十六进制表示 X 大写16进制表示 以上是整数类型 以下是浮点数类型 e,E 都是科学计数法,只是看是显示e还是E f 非科学计数法表示浮点数 % 百分数表示浮点数
-
-
-
-3.4 模块2:time库的使用
time库是Python中处理时间的标准库
time库包括三类函数
- 时间获取:time() ctime() gmtime()
- 时间格式化:strftime() strptime()
- 程序计时:sleep(),perf_counter()
时间获取
| 函数 | 描述 |
|---|---|
| time() | 获取当前时间戳,即计算机内部时间值,浮点数。time.time() |
| ctime() | 获取当前时间并以易读方式表示,返回字符串。time.ctime() |
| gmtime() | 获得当前时间,表示为计算机可处理的时间格式。time.gmtime() |
时间格式化
将时间以合理方式展示出来
- 格式化:类似字符串格式化,需要有展示模板
- 展示模板由特定的格式化控制符组成
- strftime()方法
| 格式化字符串 | 日期/时间说明 | 值范围和实例 |
|---|---|---|
| %Y | 年份 | 0000~9999,例如:1900 |
| m% | 月份 | 01~12,例如:10 |
| %B | 月份名称 | January~December,例如:Apirl |
| %b | 月份名称缩写 | Jan~Dec |
| %d | 日期 | 0~31 |
| %A | 星期 | Monday~Sunday |
| %a | 星期缩写 | Mon~Sun |
| %H | 小时(24h制) | 00~23 |
| %I | 小时(12g制) | 01~12 |
| %p | 上/下午 | AM,PM |
| %M | 分钟 | 00~59 |
| %S | 秒 | 00~59 |
程序计时
- 程序计时指测量气质动作所经历时间的过程
- 测量时间:perf_counter()//可以获取CPU,也就是中央处理器以其频率运行的时钟(纳秒级)
- 产生时间:sleep()
-3.5 实例4:文本进度条
简单的开始
#TextProBarV1.py
import time
scale = 10
print("-----执行开始-------")
for i in range(scale+1)
a = '*'*i
b = '.'*i
c = (i/scale)*100
print("{:^3.0f}%[{}->{}]".format(c,a,b))
time.sleep(0.1)
print("---------执行结束-------")
文本进度条单行动态刷新
- 刷新的本质是:用后打印的字符覆盖之前的字符
- 不能换行:print()需要被控制
- 要能回退:打印后光标退回到之前的位置\r(刷新的关键\r)
#TextProBarV1.1.py
import time
for i in range(101):#需要输出0%的状态,所以一共是101次
print("\r{:3}%".format(i),end="")#end:输出一个信息后默认再最后增加一个换行换到下一行
time.sleep(0.1)
#\r:在打印输出字符串之前,它能使光标退回到当前行的行首
完整代码
文本进度条 简单的开始
#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("------执行结束------")
文本进度条 单行动态刷新
#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, "-")) #center:将一个"-"字符填充在执行开始或者执行结束的两侧
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,'-'))
通过命令行程序打开