3.1 数字类型及操作
3.1.1 整数类型(与数学中整数的概念一致)
-可正可负,没有取值范围限制
-pow(x,y)函数:计算x的y次方,想算多大算多大
-四种进制表示形式
十进制:1010,99,-217
二进制,以0b或0B开头:0b010,0B101
八进制,以0o或0O开头:0o123,-0O456
十六进制,以0x或0X开头:0x9a,-0X89
3.1.2 浮点数类型(与数学中实数的概念一致)
-带有小数点及小数的数字
-浮点数取值范围和小数精度都存在限制,但常规计算可忽略
-取值范围数量级约-10的307次方至10的308次方,精度数量级10的-16次方
-浮点数间运算存在不确定尾数,不是bug
-round(x,d):对x四舍五入,d是小数截取位数
-浮点数间运算与比较用round()函数辅助
-不确定尾数一般发生在10的-16次方左右,round()函数十分有效
-浮点数可以采用科学计数法表示
-使用字母e或E作为幂的符号,以10为基数,格式如下:
<a> e <b>:表示 a * 10的b次方
3.1.3 复数类型(与数学中复数的概念一致)
-定义 j = 根号-1,以此为基础,构建数学体系
-a + bj 被称为复数,其中,a是实部,b是虚部
-z.real 获得实部;z.imag 获得虚部
3.1.4 数值运算操作符
操作符及使用 | 描述 |
x + y | 加,x与y之和 |
x - y | 减,x与y之差 |
x * y | 乘,x与y之积 |
x / y | 除,x与y之商,10/3的结果是3.3333333333333335 |
x // y | 整数除,x与y之整数商,10//3结果是3 |
+ x | x的本身 |
- x | x的负值 |
x % y | 余数,模运算;10 % 3 结果是1 |
x ** y | 幂运算,x的y次幂 当y是小数时,开方运算10**0.5结果是根号10 |
-二元操作符有对应的增强赋值操作符
-增强操作符及使用:x op = y
-描述:即x = x op y,其中,op为二元操作符
x += y | x = x + y |
x -= y | x = x - y |
x *= y | x = x * y |
x /= y | x = x / y |
x //= y | x = x // y |
x %= y | x = x % y |
x **= y | x = x ** y |
例子: >>> x = 3.1415
>>> x **= 3 # 与 x = x ** 3 等价
-类型间可进行混合运算,生成结果为“最宽”类型
三种类型存在一种逐渐“扩展”或“变宽”的关系:
整数 < 浮点数 < 复数
例如:123 + 4.0 = 127.0(整数 + 浮点数 = 浮点数)
3.1.5 数值运算函数
函数及使用 | 描述 |
abs(x) | 绝对值,x的绝对值 |
divmod(x,y) | 商余,(x//y , x%y),同时输出商和余数 |
pow(x, y[, z]) | 幂余,(x ** y)%z,[...]表示参数z可省略 |
round(x,[, d]) | 四舍五入,d是保留小数位数,默认值为0 |
max(x1,x2,...,xn) | 最大值,返回x1,x2,...,xn中的最大值,n不限 |
min(x1,x2,...,xn) | 最小值,返回x1,x2,...,xn中的最小值,n不限 |
int(x) | 将x变成整数,舍弃小数部分 |
float(x) | 将x变成浮点数,增加小数部分 |
complex(x) | 将x变成复数,增加虚数部分 |
3.2 实例3:天天向上的力量
-工作日模式要努力到什么水平,才能与每天努力1%一样?
-A君:一年365天,每天进步1%,不停歇
-B君:一年365天,每周工作5天休息2天,休息日下降1%,要多努力呢?
#DayDayUpQ4.py
def dayUp(df): #参数df:是一个占位符,表示dayfactor的简写
dayup = 1
for i in range(365):
if i % 7 in [6,0]:
dayup = (1 - 0.01) * dayup
else:
dayup = (1 + df) * dayup
return dayup
dayfactor = 0.01
while dayUp(dayfactor) < 37.78:
dayfactor += 0.001
print("B君工作日需要努力{:.3f},才能赶上A君".format(dayfactor))
3.3 字符串类型及操作
3.3.1 字符串类型的表示
-字符串有2类共四种表示方法:
-由一对单引号或双引号表示,仅表示单行字符串
-由一对三单引号(有注释的作用)或三双引号表示,可表示多行字符串
-使用[M:N:K]根据步长对字符串切片
-<字符串>[M:N],M缺失表示至开头,N缺失表示至结尾
“零一二三四五六七八九十”[:3] 结果是 “零一二”
-<字符串>[M:N:K],根据步长K对字符串切片
[M:N:K]表示从索引M开始,每隔K个元素取一个,直到索引N为止。例如,[1:10:2]表示从索引1开始,每隔2个元素取一个,直到索引10为止。注意,如果省略M,则默认从第一个元素开始;如果省略N,则默认取到最后一个元素;如果省略K,则默认为1,即相邻元素之间取一个。
“零一二三四五六七八九十”[1:8:2] 结果是 “一三五七”
“零一二三四五六七八九十”[::1] 结果是 “零一二三四五六七八九十”
[::-1]用于反转一个序列(字符串、列表、元组等)。例如,如果有一个字符串s,使用s[::-1]将返回一个新的字符串,其中字符的顺序与s相反。
“零一二三四五六七八九十”[::-1] 结果是 “十九八七六五四三二一零”
-转义符 \
-转义符表达特定字符的本意
"这里有个双引号(\")" 结果是 这里有个双引号(")
-转义符形成一些组合,表达一些不可打印的含义
"\b" 回退
"\n" 换行(光标移动到下行首)
"\r" 回车(光标移动到本行首)
3.3.2 字符串操作符
操作符及使用 | 描述 |
x + y | 连接两个字符串x和y |
n * x或x * n | 复制n次字符串x |
x in s | 如果x是s的子串,返回True,否则返回False |
获取星期字符串
-输入: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 字符串处理函数(一些以函数形式提供的字符串处理功能)
函数及使用 | 描述 |
len(x) | 长度,返回字符串x的长度 |
str(x) | 任意类型x所对应的字符串形式 |
hex(x)或oct(x) | 整数x的十六进制或八进制小写形式字符串 |
chr(u) | x的Unicode编码,返回其对应的字符 |
ord(x) | x为字符,返回其对应的Unicode编码 |
3.3.4 字符串处理方法(一些以方法形式提供的字符串处理功能)
方法及使用 | 描述 |
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 |
3.3.5 字符串类型的格式化(格式化是对字符串进行格式表达的方式)
-字符串格式化使用.format()方法,用法如下:
<模板字符串>.format(<逗号分隔的参数>)
-format()方法的格式控制(槽内部对格式化的配置方式)
{<参数序号>: <格式控制标记>}
: | <填充> | <对齐> | <宽度> | <,> | <.精度> | <类型> |
引导符号 | 用于填充的单个字符 | < 左对齐 > 右对齐 ^ 居中对齐 | 槽设定的输出宽度 | 数字的千位分隔符 | 浮点数小数精度或字符串最大输出长度 | 整数类型:b,c,d,o,x,X 浮点数类型:e,E,f,% |
3.4 模块2:time库的使用
3.4.1 time库基本介绍
-time库是python中处理时间的标准库
-计算机时间的表达
-提供获取系统时间并格式化输出功能
-提供系统级精确计时功能,用于程序性能分析
-import time
time.<b>()
-time库包括三类函数
-时间获取:time() ctime() gmtime()
-时间格式化:strftime() strptime()
-程序计时:sleep(), perf_counter()
3.4.2 时间获取
函数 | 描述 |
time() | 获取当前时间戳,即计算机内部时间值,浮点数(从1970年1月1日00:00分开始到现在) |
ctime() | 获取当前时间并以易读方式表示,返回字符串 |
gmtime() | 获取当前时间,表示为计算机可处理的时间格式 |
3.4.3 时间格式化(将时间以合理的方式展示出来)
-格式化:类似字符串格式化,需要有展示模板
-展示模板由特定的格式化控制符组成
-strftime()方法 strptime()方法
函数 | 描述 |
strftime(tpl, ts) | tpl是格式化模板字符串,用来定义输出效果 ts是计算机内部时间类型变量 时间格式化很重要的一点就是将计算机内部时间中表达的年月日时分秒等相关的与时间有关的信息,用一种变量的形式进行合理组合,并且合理输出,通过控制来表达输出格式 |
strptime(str,tpl) | str是字符串形式的时间值 tpl是格式化模板字符串,用来定义输入效果 它可将一段字符串变为时间变量(也就是将一段字符串变为计算机内部可以操作的一个时间) |
-格式化控制符
格式化字符串 | 日期/时间说明 | 值范围和实例 |
%Y | 年份 | 0000~9999,例如:2023 |
%m | 月份 | 01~12,例如:06 |
%B | 月份名称 | January~December,例如:June |
%b | 月份名称缩写 | Jan~Dec,例如:Jun |
%d | 日期 | 01~31,例如:17 |
%A | 星期 | Monday~Sunday,例如:Saturday |
%a | 星期缩写 | Mon~Sun,例如:Sat |
%H | 小时(24h制) | 00~23,例如:12 |
%h | 小时(12h制) | 01~12,例如:7 |
%p | 上/下午 | AM,PM,例如:PM |
%M | 分钟 | 00~59,例如:26 |
%S | 秒 | 00~59,例如:26 |
3.4.4 程序计时应用(程序计时应用广泛)
-程序计时指测量起止动作所经历时间的过程
-测量时间:perf_counter()
-产生时间:sleep()
函数 | 描述 |
perf_counter() | 返回一个CPU级别的精确时间计数值,单位为秒 由于这个计数值起点不确定,连续调用差值才有意义 |
sleep(s) | s拟休眠的时间,单位是秒,可以是浮点数 |
3.5 实例4:文本进度条
-“文本进度条”简单的开始
#TextProBarV1.py
#简单的开始
import time
scale = 10 #文本进度条大概的宽度
print("执行开始".center(16,'-'))
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("执行结束".center(16,'-'))
-“文本进度条”单行动态刷新
#TextProBarV2.py
#“文本进度条”单行动态刷新
import time
for i in range(101):
print("\r{:3}%".format(i), end="")
time.sleep(0.2)
-“文本进度条”实例完整效果
#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, '-'))