python提供了两种基本的数值类型_第三章 — Python的基本数据类型

  • Post author:
  • Post category:python


Python的基本数据类型

基本数据类型 – 数值

一 数值类型(不可变数据类型) :

整型(int) 浮点型(float) 复数类型(complex) à 数值运算过程下,会自动从左到右进行转换

布尔类型(bool) à 只有 True 和 False 两种结果 ;

1 bool 继承了 int 类型,因此可直接使用 bool 参与数学运算 ,int(True) = 1 , int(False) = 0

2 非零,非空为 真 , 零值,空值为假

PS –

type( ) 函数可以参与 数据类型的查看

强制类型转换 int float complex

关于 float 涉及的运算精度问题 – 有效保证 小数点后16位

int(“整数字符串”,n)

int(“111”) à 111 默认转化为十进制数 111

int(“111”,2) à 7 指定参数 2 将其转化为二进制数 7

二 数值运算

1  算数运算 + – * ** / // %

Ps –

“/” 真除法,以实际结果为准,保留至少一个小数位,最多保留16位

“//”, “%” 取整,取余 ,运算结果的类型取决于操作数的类型

2  比较运算 == != > < >= <=

Ps –

数值进行比较时,以大小进行比较 ; 字符进行比较时,转化为 ASCII对应的值进行比较

3  赋值运算符 = += -= *= /= **= %= //=

4  位运算 & | ~ ^ << >>

Ps –

处理位运算的过程中,需要首先将其转换为 二进制 模式进行处理,然后按照对应位以相应的位运算法则进行处理

5  逻辑运算 and or not

Ps –

and or 参与的运算 ,其结果为对象的值

not 参与的运算 ,其结果布尔类型(True,False)

6  成员运算符 in , not in

Ps –

成员运算符,对其结果的判定取决于两个条件:值与类型

7  身份运算符 is , not is

Ps –

用于比较两个对象的内存地址,可用于判定两个变量是否应用于一个相同的对象

三 关于小数的精度处理

A 由于整数可以处理任意大类型的数,故可以将某些小数进行整数化(放大)

B 小数对象 – 使用 decimal 包下的 Decimal 函数创建

看作固定精度的浮点数,它有固定的位数和小数,可以满足要求的精度计算

1297599-20201014162114666-2081185957.png

1297599-20201014162122027-1445005660.png

C 分数 – 使用 fractions 模块下的 Fraction函数来创建

使用分数可以有效的避免浮点数误差

1297599-20201014162056051-1951148318.png

PS –

Python 变量与对象

X = 5

Python 在执行上述语句的过程中包含了3大步骤:

1 创建表示 整数的对象 5 , 在 Python 中的数据都是以对象方式存在

2 检查变量 X 是否存在 , 不存在则创建它

3 建立变量 X 到 5 之间的关系—变量 X 引用对象 5

Ps – Python 中使用变量时,必须理解下面几点:

1 变量在第一次赋值时被创建,再次出现时直接使用

2 变量没有数据类型的概念,数据类型属于对象,类型决定了对象在内存下的存储模式

3 变量引用了对象,当在表达式中使用变量时,变量立即被其引用的对象替代,所以变量在使用前必须对其赋值

Ps–Python 对象的垃圾回收

当对象没有任何引用时,其占用的内存空间会被自动回收

在 Python 内部,Python 为每一个变量创建一个计数器,计数器记录对象的引用次数;若计数器为0,则对象被删除,其占用的空间将会被回收

补充:

1  关于变量名的命名规则 –

前后有下划线的变量,通常为系统变量 ;例如 _name_ , _doc_ …

以一个下划线开头的变量,不能被 from … import * 语句从模块下导入 ;例如 _abc

以两个下划线开头无下划线结尾的变量是类的本地变量 ;例如 __abc

2  关于赋值语句 –

一 序列赋值

1 “=” 左侧是元组,列表表示的变量名,右侧是元组,列表,字符串等

x,y = 1,2

[x,y] = (10,20 )

[x,y] = [20,”abc”]

2 当“=” 右侧是字符串时,Python会将字符串分解为单个字符,依次赋值给各个变量

(x,y,z) = ‘abc’

((x,y),z) = ‘abc’

3 可以在变量名之前合理使用 * 号,此时,不带星号的变量匹配一个值,其余的都将赋给星号的变量

x,*y = ‘abcd’

*x , y = ‘abcd’

x,*y,z = ‘abcd’

二 多目标赋值

使用 = 实现连续赋值

a = b = c = 10

三 关于变量的共享引用

可以借助 身份运算符 is 来判断两个变量是否引用于同一个对象

x = 4

y = x

x = 7

思考 y 是否会受到 x 的影响

x = [4,5,6]

y = x

x[0] = 7

思考 y 是否会受到 x 的影响

基本数据类型 – 字符串

一 字符串的表示及其用法—

表示方法 :

1. 通过引号进行表示 例如: ‘a’ “a” 等

2. 利用内置的 str 函数 进行转换 例如: str(123)

3. 使用带有 r或R/b/B前缀的Raw字符串 例如: r’abc\n123’

4. 使用带有 u或者U 前缀的 Unicode 字符串 例如: u’asdf’

思考题: 如何有效完成一个路径字符串的输入

假定字符串为 : C:\Users\Pluto

1 借助转义字符 \ 来实现对 “\”的处理

2 采用使用带有 r或R/b/B前缀的Raw字符串

例如 :

“C:\\Users\\Pluto”

r“C:\Users\Pluto”

PS – 转移字符

1297599-20201014161940953-727101872.png

Ps – bytes 字符串

表达式 à b+传统字符串 例如:b’a’ , b’123’ , b’Python code’ ,

注意:

字符串中只包含 ASCII 码字符

使用时,bytes字符串返回对应的字符的 ASCII 码

二 字符串的相关运算

索引与切片

例如:给定一个字符串 String = “987654321”

正向

0

1

2

3

4

5

6

7

8

元素

9

8

7

6

5

4

3

2

1

反向

-9

-8

-7

-6

-5

-4

-3

-2

-1

1 利用索引进行值的选择,

例如 取出当前元素 String 中的 6 ,可以采用如下方式

1297599-20201014161902355-799027636.png

2 利用索引来完成切片选择

例如: 利用正向 取出一定范围的元素 654 ,可以采用如下方式

1297599-20201014161840487-341140713.png

例如: 利用反向 取出一定范围的元素 456 ,可以采用如下方式

1297599-20201014161827125-2091481587.png

PS – 关于利用索引进行切片的过程中,需要特别注意,在已经给定的方向上,一般要满足两个条件,其一一致方向,其二起始值小于终止值

一个的格式如下:

String[ start : end : step ] 其中 start 代表起始值 , end 代表终止值,step 可以约束方向以及数据间隔

例如

1297599-20201014161811399-1109527912.png

3 计算字符串的长度 — len( ) 函数

1297599-20201014161745443-410010823.png

4 关系判断 — in , not in

1297599-20201014161722615-1580852037.png

5 字符串的连接

1 * 完成的复制(只可以乘以一个 正整数类型)

2 + 完成组合

1297599-20201014161702954-445221484.png

6 字符串的迭代 — 可利用 for 循环迭代来处理序列类型的字符串

序列迭代的模式有两种:一种是元素的迭代,一种是索引的迭代

1297599-20201014161640343-1127675353.png

补充 — 字符串的格式化输出

一 以 % 占位符模式

譬如 print(“The %s’s price is %4.2f” %(“apple”,2.5))

字符串之前的部分表示格式化表达式输出的部分

字符串之后的部分表示参数列表部分

1297599-20201014161625679-886912506.png

PS – 格式化表达式的基本结构

%[填充方式][对齐方式][数字宽度][小数点位数][格式化输出类型]

格式化控制符 —

1297599-20201014161604948-1193239118.png

1297599-20201014161555326-1618367794.png

二 以 格式化输出函数 format

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

格式化输出 – 槽与槽位

1297599-20201014161447145-1365637922.png

1297599-20201014161457627-1188051676.png

槽内部对格式化的配置方式

1297599-20201014161433116-256033737.png

例如:

1297599-20201014161403555-2122856736.png

1297599-20201014161413193-1845906071.png

字符串的常用方法 — “方法”特指.

()风格中的函数

( )

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

1297599-20201014161342892-1793808016.png

补充 — 一些以函数形式提供的字符串处理功能

1297599-20201014161330477-2091581779.png

补充:Unicide编码 — 统一字符编码,即覆盖几乎所有字符的编码方式;从0到1114111 (0x10FFFF)空间,每个编码对应一个字符;Python字符串中每个字符都是Unicode编码字符

1297599-20201014161313793-452525016.png

练习题 :

1 随机生成 20 个数 , 完成这20个数的 均值,方差以及标准差的计算

2 完成任意给定的两个数的最大公约数的计算

3 试给出如下数列的前21项:

1 1 2 3 5 8

4 输出九九乘法表

5 输出21层金字塔

6 输出 1-1000以内的所有回文数