1.数字类型与操作:
整数:
- 可正可负,没有取值范围限制
- pow(x,y):计算x的y次方,没有限制
- 四种进制表示形式:
- 十进制
- 二进制
- 八进制
- 十六进制
浮点数:
浮点数间运算存在不确定尾数,不是bug
>>>0.1 + 0.2 0.300......4
使用round
函数计算浮点数,小数点后取一位
round(0.1+0.2,1) == 0.3
- 带有小数点及小数的数字
- 浮点数取值范围和小数精度都存在限制,但常规计算可忽略
- 取值范围约-10的308到10的308次方,精度数量级10的-16次方
- 使用字符e或E作为幂的符号,以10为基数,格式如下:
<a>e<b> a*10的b次方
复数
与数学中复数一致
数值运算操作符
加减乘除整数除 +、-、*、/、// # x本身 +x # y的负值 -y # 取余数 x % y # 幂运算,次方 x**y # 二元操作符 x op= y
数字之间关系
三种类型存在一种逐渐“扩展”或“变宽”的关系
整数——》浮点数——》复数
数值运算函数
- 绝对值:
abs(x)
x的绝对值,例:abs(-10.1),结果为10.1 - 商余:
divmod(x,y)
,例:divmod(10,3),值为(3,1) - 幂余:pow(x,y[,z]):例:pow(3,pow(3,99),10000)值为4587
- 最大值:max(x1,x2,x3),例:max(1,3,5),值为5
- 最小值:min(x1,x2,x3),例:min(1,3,5),值为1
- int(x):将x变成整数,舍弃小数部分
- float(x):将x变成浮点数,增加小数部分
- complex(x):将x变成复数,增加虚数部分
2.案例:天天向上的力量
第一问:1‰的力量
- 一年365天,每天进步1‰,累计进步多少呢?
- 每天退步1‰,累计剩下的还有多少?
dayup =pow(1.001, 365) daydown =pow(0.999, 365) print("向上:{:.2f}, 向下:{:.2f}".format(dayup, daydown)) 向上:1.44, 向下:0.69
第二问:5‰和1%的力量
- 一年365天,每天进步5‰或1%,累计进步多少呢?
- 每天退步5‰或1%,又剩下多少呢?
# 千分之一 dayfactor = 0.005 dayup = pow(1+dayfactor, 365) daydown = pow(1-dayfactor, 365) print("向上:{:.2f}, 向下:{:.2f}".format(dayup, daydown)) 向上:6.17, 向下:0.16 # 百分之一 dayfactor = 0.01 dayup = pow(1+dayfactor, 365) daydown = pow(1-dayfactor, 365) print("向上:{:.2f}, 向下:{:.2f}".format(dayup, daydown)) 向上:37.78, 向下:0.03
第三问:工作日的力量
- 一年365天,一周五个工作日,每天进步1%
- 双休日每天退步1%
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
第四问:工作日的努力
- 工作日需要努力到什么程度,才能与每天努力1%一样
- A:每天进步1%,365天不停歇
- B:工作日进步5天,双休日每天下降1%,要多努力?
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
3.字符串类型及操作
字符串类型表示
字符串有两类共4种表达方式:
- 由一对单引号或双引号表示单行字符串
”请输入密码:“ ‘python’
- 由一堆三单引号或双引号表示多行字符串
''' 人生苦短 我用python'''
字符串的序号:
- 正向递增序号 和 反向递减序号
- 正向从0开始,反向从-1开始
字符串的使用:
- 使用[]获取字符串中一个或多个字符
- 索引:返回字符串中单个字符
"请输入带有符号温度值:"[0] 或 TempStr[-1]
- 切片:返回字符串中的一段子串
"请输入带有符号温度值:"[1:3] 或 TempStr[0:-1]
字符串切片高级用法:
- 使用[M:N:K]根据步长对字符串切片
- <字符串>[M:N]:M缺失表示至开头,N缺失表示至结尾
”零一二三四五六七八九十“[:3] 结果为零一二
- <字符串>[M:N]:根据步长K对字符串进行切片
# 步长为2进行取值 ”零一二三四五六七八九十“[1:8:2] 结果为一三五七 # 逆序 ”零一二三四五六七八九十“[::-1] 结果为十九八七六五四三二一零
字符串的特殊字符:
- 转义符:
\
表示特定字符的本意
\":表示"本身的含义 \b:回退 \n:换行 \r:回车,光标移动到本行首
字符串操作符
x + y:连接两个字符串x和y n * x 或 x * n:复制n次字符串x x in s:如果x是s的子串,返回True,否则返回false
例:
weekStr = "一二三四五六日" weekId = eval(input("请输入星期数字(1-7):")) print("星期" + weekStr[weekId-1]) 请输入星期数字(1-7):1 星期一
字符串处理函数
一些以函数形式提供的字符串处理功能
len(x)
:返回字符串的长度str(x)
:将结果转换为字符串形式hex(x)/cot(x)
:转换成x的十六进制形式或八进制形式字符串chr(u)
:u为unicode编码,返回对应的字符ord(x)
:x为字符,返回对应的unicode编码
Unicode编码:python字符串的编码形式
- 统一字符编码,即覆盖几乎所有字符的编码形式
- 从0到1114111空间,每个编码对应一个字符
示例:输出12星座的字符串形式
for i in range(12): print(chr(9800 + i), end="") ♈♉♊♋♌♍♎♏♐♑♒♓
字符串处理方法
方法在 编程中是一个专有名词
- “方法”特指<a>.<b>()风格中的函数<b>() - 方法本身也是函数,但与<a>有关,<a>.<b>()风格使用 - 字符串及变量也是<a>,存在一些方法
一些以方法形式提供的字符串处理功能
- str.lower()或str.supper():返回字符串的副本,全部字符小写或大写 print("aBBNvfN".lower()) abbnvfn - str.split(sep=None):返回一个列表,由str根据sep被分隔的部分组成 print("a,B,B".split(",")) ['a,B,B'] - str.count(sub):返回子串sub在str中出现的次数 print("asd ad da waaa as".count("a")) 7 - str.replace(ord, new):返回字符串副本,所有old子串替换成new print("python".replace("n", "n123")) python123 - str.center(width[,fillchar]):字符串str根据宽度width居中,fillchar可选 print("python".center(20, "=")) =======python======= - str.strip(chars):从str中去掉左侧和右侧chars中列出的字符 print("= - s python ==".strip("= -s")) python - str.join(iter):在iter变量除最后元素外的每个元素后增加一个str print("。".join("python")) p。y。t。h。o。n
字符串类型的格式化
格式化是对字符串进行格式表达的方式
- 字符串格式化使用
.format()
方法
print("{0:=^20}".format("python")) =======python======= print("{0:,.2f}".format(1234.3233)) 1,234.32
4.time库使用
time库是python中处理时间的标准库
- 计算机时间表达
- 提供获取系统时间并格式化输出功能
- 提供系统级精确计时功能,用于程序性能分析
time库包括三类函数
- 时间获取:time()、ctime()、gmtime()
- 时间格式化:strftime()、strptime()
- 程序计时:sleep(), pref_counter()
时间获取:
获取当前时间戳的三种方式及结果:
import time print(time.time()) print(time.ctime()) print(time.gmtime()) # 输出结果 1678366911.6781032 Thu Mar 9 21:01:51 2023 time.struct_time(tm_year=2023, tm_mon=3, tm_mday=9, tm_hour=13, tm_min=1, tm_sec=51, tm_wday=3, tm_yday=68, tm_isdst=0)
时间格式化
将时间以合理的方式展示出来
- 格式化:类似字符串格式化,需要有展示模板
- 展示模板由特定的格式化控制符组成
格式化字符串:
%Y:年份:0000~9999 %m:月份;01~12 %B:月份名称;January~December %b:月份缩写;Jan~Dec %A:星期;Monday~Sunday %a:星期缩写;Mon~Sun %H:小时(24小时制);00~23 %I:小时(12小时制);01~12 %p:上下午;AM,PM %M:分钟;00~59 %S:秒;00~59
import time t = time.gmtime() print(time.strftime("%Y-%m-%d %H:%M:%S", t)) # 输出结果 2023-03-09 13:16:08
程序计时应用
- 程序计时指测量起止动作所经历时间的过程
- 测量时间:perf_counter()
- 产生时间:sleep(),休眠
5.案例:文本进度条
文本进度条:
- 采用字符串方式打印可以动态变化的文本进度条
- 进度条需要能在一行中逐渐变化
如何获得文本进度条的变化时间:
- 采用sleep()模拟一个持续的时间
案例代码:
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("------执行结束------") # 输出结果 ------执行开始------ 0 %[->..........] 10 %[*->.........] 20 %[**->........] 30 %[***->.......] 40 %[****->......] 50 %[*****->.....] 60 %[******->....] 70 %[*******->...] 80 %[********->..] 90 %[*********->.] 100%[**********->] ------执行结束------
代码讲解:
- 第一行:引入time库
- 第三、十行:开始结束标签
- 第二行:文本进度条宽度
- 第四行:定义一个for循环
文本进度条单行动态刷新:
import time for i in range(101): print("\r{:3}%".format(i), end="") time.sleep(0.1)
完整代码:
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,'-'))