Python 学习笔记(二)

Python 数字类型及操作

  • 整数类型
  • 浮点数类型
  • 复数类型
  • 数值运算操作符
  • 数值运算函数

整数类型

与数学中整数的概念一致

  • 可正可负,没有取值范围限制

  • pow(x,y) 函数:计算 x 的 y 次方,想算多大算多大

4 种进制表示形式

  • 十进制:1010, 99, -217
  • 二进制,以0b或0B开头:0b010, -0B101
  • 八进制,以0o或0O开头:0o123, -0O456
  • 十六进制,以0x或0X开头:0x9a, -0X89

浮点数类型

与数学中实数的概念一致

  • 带有小数点及小数的数字
  • 取值范围数量级约 -10 的 307 次方 至 10 的 308 次方,精度数量级 10 的 -16 次方

浮点数间运算存在不确定尾数,不是bug。原因:机器用 53 位二进制表示小数部分,约 10 的 -16 次方,可以无限接近,但不完全相同,当转换为十进制表示时,就可能存在不确定尾数。

  • round(x, d):对 x 四舍五入,d 是小数截取位数

  • 不确定尾数一般发生在 10 的 -16 次方左右,round() 十分有效

浮点数可以采用科学计数法表示

  • 使用字母e或E作为幂的符号,以10为基数
  • 例如:4.3e-3 值为0.0043,9.6E5 值为960000.0

复数类型

与数学中复数的概念一致

如果 x 的 2 次方 = -1,那么 x 的值什么?

  • 定义 j = −𝟏 开根号 ,以此为基础,构建数学体系
  • a+bj 被称为复数,其中,a 是实部,b 是虚部

数值运算操作符

操作符及使用 描述
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本身
- y x的负值
x % y 余数,模运算 10%3结果是1
x ** y 幂运算,x的y次幂,当y是小数时,开方运算10**0.5结果是根号10

整数与浮点数进行运算时,结果为浮点数

数值运算函数

  • abs(x) 绝对值,x的绝对值
  • 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
  • round(x[, d]) 四舍五入,d 是保留小数位数,默认值为 0
  • max(x1,x2, … ,xn) 最大值,返回 x1,x2, … ,xn 中的最大值,n不限
  • min(x1,x2, … ,xn) 最小值,返回 x1,x2, … ,xn 中的最小值,n不限
  • int(x) 将 x 变成整数,舍弃小数部分, int(123.45) 结果为 123; int(“123”) 结果为 123
  • float(x) 将 x 变成浮点数,增加小数部分 float(12) 结果为 12.0; float(“1.23”) 结果为 1.23
  • complex(x) 将 x 变成复数,增加虚数部分 complex(4) 结果为 4 + 0j

工作日的力量示例

1
2
3
4
5
6
7
8
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))

字符串类型及操作

  • 字符串类型的表示
  • 字符串操作符
  • 字符串处理函数
  • 字符串处理方法
  • 字符串类型的格式化

字符串类型

字符串由一对单引号或一对双引号表示

  • 由一对单引号或双引号表示,仅表示单行字符串

  • 由一对三单引号或三双引号表示,可表示多行字符串

使用[ ]获取字符串中一个或多个字符

  • 索引:返回字符串中单个字符 <字符串>[M]
  • 切片:返回字符串中一段字符子串 <字符串>[M: N]
字符串切片高级用法
  • <字符串>[M: N],M 缺失表示至开头,N 缺失表示至结尾
  • <字符串>[M: N: K],根据步长K对字符串切片
1
2
"〇一二三四五六七八九十"[1:8:2] # "一三五七"
"〇一二三四五六七八九十"[::-1] # "十九八七六五四三二一〇"
字符串的特殊字符

转义符 \

1
print("这里有个双引号(\")") # 这里有个双引号(")

转义符形成一些组合,表达一些不可打印的含义

  • “\b” 回退
  • “\n” 换行(光标移动到下行首)
  • “\r” 回车(光标移动到本行首)

字符串操作符

操作符及使用 描述
x + y 连接两个字符串 x 和 y
n x 或 x n 复制 n 次字符串 x
x in s 如果 x 是 s 的子串,返回 True,否则返回 False

处理字符串函数

函数及使用 描述
len(x) 长度,返回字符串x的长度 len(“一二三456”) 结果为 6
str(x) 任意类型 x 所对应的字符串形式
hex(x) 或 oct(x) 整数 x 的十六进制或八进制小写形式字符串
chr(u) x 为 Unicode 编码,返回其对应的字符
ord(x) x 为字符,返回其对应的 Unicode 编码

字符串处理方法

方法及使用 描述
str.lower() 或 str.upper() 返回字符串的副本,全部字符小写/大写
str.split(sep=None) 返回一个列表,由 str 根据 sep 被分隔的部分组成
str.count(sub) 返回子串 sub 在 str 中出现的次数,”an apple a day”.count(“a”) 结果为 4
str.replace(old, new) 返回字符串 str 副本,所有 old 子串被替换为 new
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(“12345”) 结果为 “1,2,3,4,5” #主要用于字符串分隔等

字符串格式化

字符串格式化使用 format() 方法,用法如下:

<模板字符串>.format(<逗号分隔的参数>)

1
2
3
4
"{}:计算机{}的CPU占用率为{}%".format("2018-10-10","C",10)
# 2018-10-10:计算机C的CPU占用率为10%
"{1}:计算机{0}的CPU占用率为{2}%".format("2018-10-10","C",10)
# C:计算机2018-10-10的CPU占用率为10%

{} 表示槽

槽内部对格式化的配置方式:{ <参数序号> : <格式控制标记>}

  • : 引导符号
  • <填充> 用于填充的单个字符
1
"{0:=^6}".format("PYTHON") # ===PYTHON===
  • <对齐> < 左对齐 > 右对齐 ^ 居中对齐
1
"{0:=>5}".format("BIT") # =====BIT
  • <宽度> 槽设定的输出宽度,只有在格式的字符串宽度小于设定宽度时有效
1
2
"{:=^5}".format("BIT") # =BIT=
"{0:3}".format("PYTHON") # PYTHON
  • <,> 数字的千位分隔符
1
"{0:,}".format(12345) # 12,345
  • <.精度> 浮点数小数精度或字符串最大输出长度
1
2
"{0:,.2f}".format(12345.678) # 12,345.68
"{0:.3}".format("PYTHON") # PYT
  • <类型> 整数类型 b, c, d, o, x, X 浮点数类型 e, E, f, %
1
2
"{0:b},{0:c},{0:d},{0:o},{0:x},{0:X}".format(425) # 110101001,Ʃ,425,651,1a9,1A9
"{0:e},{0:E},{0:f},{0:%}".format(3.14) # 3.140000e+00,3.140000E+00,3.140000,314.000000%

time 库的使用

时间获取

  • time() 获取当前时间戳,即计算机内部时间值,浮点数

    1
    time.time() # 1539334105.576661
  • ctime() 获取当前时间并以易读方式表示,返回字符串

    1
    time.ctime() # Fri Oct 12 16:49:35 2018
  • gmtime() 获取当前时间,表示为计算机可处理的时间格式

    1
    2
    time.gmtime()
    # time.struct_time(tm_year=2018, tm_mon=10, tm_mday=12, tm_hour=8, tm_min=50, tm_sec=26, tm_wday=4, tm_yday=285, tm_isdst=0)

时间格式化

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

    1
    2
    t = time.gmtime()
    time.strftime("%Y-%m-%d %H:%M:%S", t) # 2018-10-12 08:51:59
  • strptime(str, tpl) str是字符串形式的时间值;tpl是格式化模板字符串,用来定义输入效果

    1
    2
    3
    timeStr = '2018-11-11 11:11:11'
    time.strptime(timeStr, "%Y-%m-%d %H:%M:%S")
    # time.struct_time(tm_year=2018, tm_mon=11, tm_mday=11, tm_hour=11, tm_min=11, tm_sec=11, tm_wday=6, tm_yday=315, tm_isdst=-1)
格式化控制符
格式化字符串 日期/时间说明 值范围和实例
%Y 年份 0000~9999,例如:1900
%m 月份 01~12,例如:10
%B 月份名称 January~December,例如:April
%b 月份名称缩写 Jan~Dec,例如:Apr
%d 日期 01~31,例如:25
%A 星期 Monday~Sunday,例如:Wednesday
%a 星期缩写 Mon~Sun,例如:Wed
%H 小时(24h制) 00~23,例如:12
%h 小时(12h制) 01~12,例如:7
%p 上/下午 AM, PM,例如:PM
%M 分钟 00~59,例如:26
%S 00~59,例如:26

程序计时

  • perf_counter() 返回一个 CPU 级别的精确时间计数值,单位为秒,由于这个计数值起点不确定,连续调用差值才有意义

    1
    2
    3
    start = time.perf_counter() # 28911.429803793
    end = time.perf_counter() # 28921.430324547
    end - start # 10.000520754001627
  • sleep(s) s 拟休眠的时间,单位是秒,可以是浮点数

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

文本进度条示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
# \r 的作用:打印后光标退回到之前的位置
# end="" 作用:print() 函数默认打印完后换行,加此表示最后不换行
print("\r[{}{:^3.0f}%{}]{:.2f}s".format(a, c, b, dur), end="")
time.sleep(0.1)
print("\n" + "执行结束".center(scale // 2, "-"))