基本数据类型
数字类型及操作:
-整数类型: 可正可负,没有取值范围限制: pow(x, y) x的y此方
十进制、二进制0b或0B开头,八进制0o或0O开头,十六进制,0x或0X开头
-浮点数:实数,范围-10^308~10^308,精度数量级10^-16
存在不确定尾数,不是bug :round(x, d)对x四舍五入,d是位数
-复数:
-数值运算操作符:+、-、*、/(结果浮点数)、//(结果整数)、%、**(幂)
x op= y
混合运算时,生成结果为“最宽”类型
整数 -> 浮点数 -> 复数 (逐渐“变宽”) 123 + 4.0 = 127.0
-数值运算函数:abs(x) 求x的绝对值
divmod(x, y),同时输出商和余数,以二元组返回
Pow(x, y, [, z]) 幂余: (x**y) % z, z可省略
round(x[, d]) 四舍五入,d是保留位数,默认为0
max(xa, x2, ...., xn) 返回最大值
min(xa, x2, ...., xn) 返回最小值
int(x) 将x变为整数
float(x) 变为浮点数,增加小数位
complex(x) 变为复数
天天向上的力量:
一年365天,每天进步1%,累计进步多少? 每天退步1%,累计剩下多少?
-第一问:千分之一的力量
#DayDayUpQi.py
dayup = pow(1.001, 365)
daydown = pow(0.999, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
-第二问:千分之五和百分之一的力量
引入变量dayfactor,便于修改
#DayDayUpQ2.py
dayfactor = 0.005 #/0.01
dayup = pow(1 + dayfactor, 365)
daydown = pow(1 - dayfactor, 365)
print("向上:{:.2f},向下:{:.2f}".format(dayup, daydown))
-第三问:工作日的力量:
周一到周五进步1%,周六周日退步1%
#DayDayUpQ3.py
dayup = 1.0
dayfactor = 0.01
for i in range(365):
if i % 7 in [6, 0]:
dayup *= 1 - dayfactor
else:
dayup *= 1 + dayfactor
print("工作日的力量:{:.2f}".format(dayup))
-第四问:工作日的努力:
工作日模式要努力到什么程度,才能与每天努力1%一样?
for ...in... (计算思维) -> def...while...(笨办法试错)
#DayDayUpQ4.py
#定义函数:
def dayUp(df):
dayup = 1
for i in range(365):
if i % 7 in [6, 0]:
dayup *= 1 - 0.01
else:
dayup *= 1 + df
return dayup
dayfactor = 0.01
while dayUp(dayfactor) < 37.78:
dayfactor += 0.001
print("工作日的努力参数量:{:.3f}".format(dayfactor))
df参数计算工作日力量函数,参数不同代码可共用,保留字def定义函数
保留字while判断条件是否成立,成立时执行循环
字符串类型及操作:
-由0个或多个字符组成的有序字符序列
-字符串类型及操作:由一对单引号或双引号表示,仅表示单行字符串
由一对三单引号或三双引号表示(多行字符串)
字符串序号;正向递增(0,1...)、反向递减(-1,-2...)
索引/切片 Str[M:N:K]:M、N可省,K为步长,默认1
逆序输出字符串:[::-1]
转义符\ 表达特定字符的本意
-字符串操作符:+:链接两个字符串
*:复制n次字符串x (n * x)
in: 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的长度
str(x) 任意类型x所对应的字符串形式
hex(x)或oct(x)整数x的16进制或8进制小写形式字符串
chr(u) u为Unicode编码,返回其对应字符
ord(x) x为字符,返回其对应的Unicode编码
-字符串处理方法:“方法”在编程中是专有名词 <a>.<b>() b为方法
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 :”,”.join(“12345”)->”1,2,3,4,5”(分隔)
-字符串类型格式化:格式化是对字符串进行格式表达的方式
使用.format()方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
不指定,参数顺序默认
指定参数顺序
time库的使用:
-time库是Python中处理时间的标准库
-基本介绍:
计算时间表达、获取系统时间并格式化输出
import time
时间获取:time() ctime() gmtime()
时间格式化:strftime() strptime()
程序计时:sleep(), perf_counter()
-时间获取:
time() 获取当前时间戳,浮点数
ctime() 获取当前时间并以易读方式返回字符串
gmtime() 获取当前时间,表示为计算机可处理的格式
-时间格式化:
类似字符串格式化,需要有展示模板
strftime(tpl, ts)方法: tpl是格式化模板字符串,用来定义输出效果, ts是计算机内部时间类型变量
strptime(str, tpl):str是字符串形式的时间值,tpl是格式化模板字 符串,用来定义输入效果
-程序计时:
指测量起止动作所经历时间的过程
测量时间:perf_counter()
sleep(s):让程序休眠s秒,可以是浮点数
文本进度条:
-问题分析:采用字符串方式打印可以动态变化的文本进度条
进度条需要能在一行中逐渐变化
采用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("------执行结束------")
-“文本进度条”单行动态刷新
刷新的本质是:用后打印的字符覆盖之前的字符
不能换行:print()需要被控制
要能回退:打印后光标退回到之前的位置 \r
#TextProBarV2.py
import time
for i in range(101):
print("\r{:3}%".format(i),end="")
time.sleep(0.1)
需在cmd环境下运行:
-实例完整效果:
#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, '-'))
-举一反三: