数字类型及操作

与数学中整数的概念一致。有四种进制表示形式。

  • 十进制:1010,99-217
  • 二进制:0b010,-0B101
  • 八进制:0o123,-0O456
  • 十六进制:0x9a,-0X89

  • pow(x,y[,z])函数:计算 x 想算多大算多大,z 可省略,对 z 做模运算。
1
2
pow(2,100)
pow(2,pow(2,15))

浮点类型

与数学中实数的概念一致。

  • 带有小数点及小数的数字。
  • 浮点数取值范围和小数精度都存在限制,但常规计算可忽略。

浮点数间运算存在不确定尾数,不是 bug,主要是由于在计算机中所有数字都是用二进制来表示,二进制表示的长度非常长的时候会截取前 53 位的字符,运算后再转换为十进制的过程中会有偏差

这就导致了一个问题:

1
2
>>>0.1+0.2 == 0.3
False

为了解决这个问题,可以使用 round:

1
2
>>>round(0.1+0.2,1) == 0.3    #四舍五入函数,有x、d两个参数,x表示你要四舍五入的那个数,d表示四舍五入后取几位小数保留。
True

在浮点数之间运算和比较的时候,用 round 函数辅助。因为不确定尾数一般发生在 10 的-16 次方这样的地方,也就是说它并不是在小数的前几位,而是在十进制的大概 16 位上下产生的,所以 round 函数非常有效。


浮点数可以采用科学计数法表示
使用字母 e 或 E 作为幂的符号,以 10 为基数,格式如下:
e 表示 a*10 的 b 次方

例如:
4.3e-3 为 0.0043
9.6e5 为 960000.0


数值运算操作符

  • -
  • -
  • -
  • /
  • // 整数除
  • % 余数,模运算 10%3 =1
  • xy x 的 y 次方,当 y 是小数时,开方运算,10 0.5 是 根号 10

数值运算函数

  • abs(x) 求 x 的绝对值 abs(-10.01)为 10.01
  • divmod(x,y) 商余,同时输出商和余数 divmod(10,3)为(3,1);
  • round(x[,d]) 四舍五入,d 为小数点位数
  • max(x1,x2,x3…) 最大值
  • min(x1,x2,x3…) 最小值
  • int(x) 将 x 变成整数,舍弃小数部分
  • float(x) 将 x 变成浮点数,增加小数部分。

字符串类型

三个单引号也是字符串的一种表示,如果这个字符串没有赋值给变量,或者没有进行操作,那就可以当注释使用,python 中并没有提供多行注释的表示方式。

切片
切片使用[M:N]来表示,其中 M 和 N 都不是必须的,M 缺失表示至开头,N 缺失表示至结尾。
根据步长对字符串切片使用的是[M:N:K],比如

1
"0一二三四五六七八九十"[1:8:2]

结果是”一三五七”

如果你想从后往前来,有个小技巧:

1
"0一二三四五六七八九十"[::-1]

MN 都没有就表示至开头和至结尾,步长为-1 表示从后往前逐一取出。

操作符
x + y 连接两个字符串
x * n 复制 n 次字符串 x
x in s x 是否在 s 中,返回 True,否则 False

字符串处理函数
len(x) 返回 x 长度
str(x) 转换为字符串 str(123)为”123” , str([1,2]) 为 “[1,2]” 与 eval()相反
hex(x) 或 oct(x) 转换成 16 进制或 8 进制
chr(u) u 为 Unicode 编码,返回对应的字符
ord(x) x 为字符,返回对应的编码

字符串处理方法
str.lower()和 str.upper() 转换大小写
str.split(sep=None) 返回一个列表,用 sep 分割。”ABC”.split(“,”) 为[“A”,”B”,”C”]
str.count(sub) 返回 sub 在 str 中出现的次数 “abc”.count(“a”) 结果为 1
str.replace(old,new) 返回 str 副本,所有 old 被替换为 new “python”.replace(“n”,”n1”)结果为”python1”
str.center(width[,fillchar]) str 根据 width 居中,fillchar 可选,表示空白地方的填充 “python”.center(20,”=”) 结果为”====python====”
str.strip(chars) 去除 str 左右 chars 列出的字符 “= python”.strip(“ =np”) 结果为”ytho”
str.join(iter) 在 iter 变量每个元素后面增加一个 str “,”.join(“123”) 结果为 1,2,3

格式化
str.format() 格式化 需要用到槽,槽只在字符串中有用

1
"{1}:计算机{0}的cpu占用率为{2}%".format("2020-10-10","C",10)  //将format中的数据按槽的标记插入进去

格式控制:
: 引导符号
, 数字的千位分隔符
. 精度

1
>>>"{0:=^20}".format("PYTHON")

=号是填充符号,^表示居中对齐,将 format 中的第一个参数居中对齐,20 是输出宽度。 结果就是”====PYTHON====”

1
>>>"{0:*>20}".format("BIT")

*是填充符号,>是右对齐。结果为 “*************BIT”

1
>>>"{:10}".format("BIT")

结果是”BIT “

1
>>>"{0:,.2f}".format(12345.6789)

“12,345.68”


time 库的使用

是 python 中处理时间的标准库

  • 计算机时间的表达
  • 提供获取系统时间并格式化输出功能
  • 提供系统级精确计时功能,用于程序性能分析

使用方法:
import time
time.()

time 库包括三类函数

  • 时间获取 time() ctime() gmtime()
  • 时间格式化 strftime() strptime()
  • 程序计时 sleep() perf_counter()

时间获取
time():获取当前时间戳,即计算机内部时间值,浮点数 16252152731.123123
ctime(): 获取当前时间并以易读方式表示,返回字符串 Fri Jan 26 12:11:20 2020
gmtime():获取当前时间,表示为计算机可处理的时间格式,叫做 struct_time 格式。

时间格式化

格式化字符串:
%Y:年份
%m:月份
%B:月份名称
%b:月份名称缩写
%d:日期
%A:星期
%a:星期缩写
%H:小时(24h)
%I:小时(12h)
%p:上/下午
%M:分钟
%S:秒

格式化函数

strftime(tpl,ts):tpl 是格式化模板字符串,用来定义输出结果,ts 是计算机内部时间类型变量

1
2
3
>>>t=time.gmtime()
>>>time.strftime("%Y-%m-%d %H:%M:%S",t)
'2020-01-26 12:22:30'

strptime(str,tpl):与 strftime()是互补关系,str 是字符串形式的时间值,tpl 是格式化模板字符串

1
2
>>>timeStr = '2020-10-02 12:22:20'
>>>time.strptime(timeStr,"%Y-%m-%d %H:%M:%S")

程序计时
perf_counter(): 返回一个 cpu 级别的精确时间计数值,单位为秒,由于这个计数值起点不确定,连续调用差值才有意义。
sleep(s): s 拟休眠的时间,单位秒,可以是浮点数。

1
2
3
>>>def wait():
time.sleep(3.3)
>>>wait() #程序将等待3.3秒后退出

文本进度条例子

  • 采用 sleep 模拟一个持续的进度。
1
2
3
4
5
6
7
8
9
10
11
# 文本进度条
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.5)
print("------结束------")

升级完整版:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 文本进度条完整
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,"-"))