第3章 python数据类型(一)

1 概述

Python3中有6个标准的数据类型

1、Number(数字)

2、String(字符串)

3、List(列表)

4、Tuple(元组)

5、Set(集合)

6、Dictionary(字典)

不可变数据(3个)

Number(数字)、String(字符串)、Tuple(元组)。

可变数据(3个)

List(列表)、Dictionary(字典)、Set(集合)。

不可哈希(unhashable)

就是指其可变,如列表、字典、集合,都能原地进行修改。

可哈希(hashable)

就是指其不可变,如数字、字符串、元组那样,不能原地修改。

列表/字典/(可变)集合----> 不能放在集合中以及不能作为字典的key(原因:(unhashable))

2 数字(Number)

数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。

Python3 支持 int、float、bool、complex(复数)。

整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。(在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中Long。)

浮点型(float) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)

复数( (complex)) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。

注意:在 Python2 中是没有布尔型(True|False)的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。

内置的 type() 函数可以用来查询变量所指的对象类型。

a, b, c, d = 10, 5.2, True, 4+3j
print
(type(a), type(b), type(c), type(d))

打印

<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

此外还可以使用 isinstance 来判断:

a= 10
A=isinstance(a, int)
print(A)

打印

True

Isinstance与type()函数的区别:

type()不会认为子类是一种父类类型。isinstance()会认为子类是一种父类类型。

class A:
    pass

class B(A):
    pass

A1=isinstance(A(),A)

A2=type(A()) == A

A3=isinstance(B(),A)

A4=type(B()) == A

print(A1,A2,A3,A4)

打印

True True True False

3 字符串(String)

字符串是一个有序的,不可修改的,使用引号( ' 或 " )包围的序列。说明:三引号 ''' 字符串应用场景:换行

Var1='syxk'
Var2="每天在坚持"
Var3="""学习Python,
为了诗和远方。"""
print(Var1+Var2+Var3)

打印

syxk每天在坚持学习Python,

为了诗和远方。

3.1 字符串格式化

在字符串当中已指定的格式符号迕行占位,然后我们将指定的数据传入字符串。

%s:字符串占位符

%d:数字占位符

%f:浮点型数字占位符

%.2f:控制浮点型数字占位符

3.1.1 %s字符串占位符

#1、打印:syxk在学习python。

name = input('姓名:')
do = input('请输入课程名称:')
template = '%s在学习,%s。'%(name,do,)
print(template)

#2、直接做占位符

template = "我是%s,年龄%s,职业%s。"%("syxk","24","运维",)
print(template)

#3、用%做占位符,要想打印出%,则必须是两个%%。

name = 'syxk'
template = "%s现在手机的电量是80%%"%(name,)
print(template)

打印

syxk现在手机的电量是80%

#4、输出个人信息

""""""
name = input('请输入姓名:')
age = input('请输入年龄:')
job = input('请输入职业:')
hobby = input('请输入爱好:')
msg = """
-----------------info of syxk Lei--------------------
Name : %s
Age : %s
Job : %s
Hobbie : %s
---------------------end--------------------------
"""
print(msg%(name,age,job,hobby))

3.1.2 %d数字占位符

#打印整数

print('我今年%d岁了'%(24))

运行结果:

我今年24岁了

3.1.3 %f浮点型数字占位符

#打印浮点数

print("我的身高是%fm"%(1.72))

运行结果:

我的身高是1.720000m

3.1.4 %.2f控制浮点型数字占位符

#打印符点数(保留两位小数)

print("我的身高是%.2fm"%(1.72))

运行结果:

我的身高是1.72m

3.1.5 其他

符号

描述

      %c

 格式化字符及其ASCII码

      %s

 格式化字符串

      %d

 格式化整数

      %u

 格式化无符号整型

      %o

 格式化无符号八进制数

      %x

 格式化无符号十六进制数

      %X

 格式化无符号十六进制数(大写)

      %f

 格式化浮点数字,可指定小数点后的精度

      %e

 用科学计数法格式化浮点数

      %E

 作用同%e,用科学计数法格式化浮点数

      %g

 %f和%e的简写

      %G

 %F 和%E 的简写

      %p

 用十六进制数格式化变量的地址

字符串格式化操作符辅助指令

符号

功能

*

定义宽度或者小数点精度

-

用做左对齐

+

在正数前面显示加号( + )

<sp>

在正数前面显示空格

#

在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X')

0

显示的数字前面填充'0'而不是默认的空格

%

'%%'输出一个单一的'%'

(var)

映射变量(字典参数)

m.n.

m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话)

3.2 字符串特殊字符

特殊字符就是在字符串当中起到特殊含义的字符。

符号

功能

\(在行尾时)

续行符

\\

反斜杠符号

\'

单引号

\\''

双引号

\a

响铃(win会颤抖下,发出不明觉厉的声响)

\b

退格(Backspace)

\000

\n

换行

\v

纵向制表符

\t

横向制表符

\r

回车

\f

换页

3.3 字符串特有功能(方法)

.upper() (全部改为大写)

.lower() (全部改为小写)

.isdigit() (判断是否是阿拉伯数字,以布尔数值返回结果,字符串中只要有非数字,输出结果都为False

.strip() (去除所有空格)/ .lstrip() (去除左侧空格) / .rstrip() (去除右侧空格)

.replace("被替换的内容","新内容",2) replace后写数字表示:替换几处

.split('分割标记') / .split('分割标记', 分割几处 ) / .rsplit()

.startswith() / .endswith() (.startswith()判断是否以某某开头,.endswith()判断是否以某某结尾)

.format() 字符串格式化(Python2.6开始)
.encode() 编码将unicode编码转换成其他类型的编码。.decode()解码
.join() 循环每个元素,并在元素与元素之间加入连接符
上述功能使用过程说明:生成新的值来接收.

3.3.1 .upper()及.lower(),判断大小写

1、要求:将小写的syxk打印成大写SYXK.
错误写法:

value = 'syxk'
value.upper()
print(value)

打印
syxk
正确写法:

value = 'syxk'
new_value = value.upper()
print(new_value)

打印
SYXK
2、要求:将SyXK中大写的字母全部换成小写字母syxk

value = 'SyXK'
new_value = value.lower()
print(new_value)

打印
syxk

3.3.2 .isdigit(),判断是否为阿拉伯数字

.isdigit() (判断是否是阿拉伯数字,以布尔数值返回结果,字符串中只要有非数字,输出结果都为False)

print('12345'.isdigit())
打印
True
print('1a45'.isdigit())
打印
False

3.3.3 .strip()/.lstrip()/.rstrip(),去除空格

.strip() (去除所有空格)/ .lstrip() (去除左侧空格) / .rstrip() (去除右侧空格)

1、输入:" syxk "

user = input('请输入用户名:') # " syxk "
new_user1 = user.rstrip()
print('---->',new_user1,'<-----')

new_user2 = user.lstrip()
print('---->',new_user2,'<-----')
# 或
new_user2 = user.strip()
data = new_user2.upper()
print('---->',data,'<-----')

打印(注:蓝色框框,是空格)

 

 

 

3.3.4 .replace(),替换

.replace("被替换的内容","新内容",2) replace后写数字表示:替换几处

1、输入:"我是sysxsyxksyxk"

message = input('请输入姓名:')
# print(message) # "syxksyxksyxk"
# data = message.replace('syxk',"**")
data = message.replace('syxk',"**",2)
print(data)

打印

请输入姓名:syxksyxksyxk

****syxk

3.3.5 .split()/rsplit(),分割标记

.split('分割标记') / .split('分割标记', 分割几处 ) / .rsplit()

1、要求:用逗号进行分割syxk现在一脸懵逼,因为晚上一直在学习,直到深夜。

message = "syxk现在一脸懵逼,因为晚上一直在学习,直到深夜。"
result1 = message.split(',')
result2 = message.split(',',1)
result3 = message.rsplit(',')
result4 = message.rsplit(',',1)
print(result1)
print(result2)
print(result3)
print(result4)

打印

['syxk现在一脸懵逼', '因为晚上一直在学习', '直到深夜。']

['syxk现在一脸懵逼', '因为晚上一直在学习,直到深夜。']

['syxk现在一脸懵逼', '因为晚上一直在学习', '直到深夜。']

['syxk现在一脸懵逼,因为晚上一直在学习', '直到深夜。']

3.3.6 .startswith() / .endswith()

.startswith() / .endswith() (.startswith()判断是否以某某开头,.endswith()判断是否以某某结尾)

1、判断是否以某某开头

#方法一:
name = 'syxk'
name = name[0:2]
if name == 'sy':
    print('是以sy开头')
else:
    print('不是以sy开头')

打印

是以sy开头

#方法二:
name = 'syxk'
name = name.startswith('sy')
print(name)

打印

True

3.3.7 .format() 字符串格式化

name = '我叫:{0},年龄:{1}岁'.format('syxk',23)
print(name)

打印

我叫:syxk,年龄:23岁

3.3.8 .encode() 编码/.decode()解码

.encode() 编码将unicode编码转换成其他类型的编码。.decode()解码

name = '岁月星空' #解释器读取后,按照unicode编码存储:8个字节
v1 = name.encode('utf-8')
print(v1)
v2 = name.encode('gbk')
print(v2)
v3 = v1.decode('utf-8')
print(v3)
v4 = v2.decode('gbk')
print(v4)

打印
b'\xe5\xb2\x81\xe6\x9c\x88\xe6\x98\x9f\xe7\xa9\xba'
b'\xcb\xea\xd4\xc2\xd0\xc7\xbf\xd5'
岁月星空
岁月星空

3.3.9 .join()

.join() 循环每个元素,并在元素与元素之间加入连接符

name = 'syxk' #s_y_x_k
result = '_'.join(name)
print(result)

打印
s_y_x_k

3.3.10 其他

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.4 字符串公共功能(方法)

Len长度

    计算长度。(字符串->计算字符串中的字符个数)

Index索引

索引(取值)

    (左侧0作为开始,右侧-1开始,超出范围报错)

索引(切片)

如:v[2:3] #2 <=索引位置 < 3

索引(步长)

    如:v[2:-1:2]

上述功能使用过程说明:生成新的值来接收.

注意:公共功能(不是指和整型和布尔类型公共, 整型和布尔类型无法使用.)

3.4.1 Len,计算长度

计算长度。(字符串->计算字符串中的字符个数)

value = 'syxk'
number = len(value)
print(number)

print(type(number))

打印

4

<class 'int'>

3.4.2 Index,索引

(左侧0作为开始,右侧-1开始,超出范围报错)

3.4.2.1 索引(取值)

value = 'syxk'
# 索引 0123 #0 1 2 3 ...从左往右
v1 = value[1]
print(v1)
#输出结果为 y

value = 'syxk'
# 索引 -4-3-2-1
v1 = value[-1] #-1 -2 -3 ...从右往左
print(v1)
#输出结果为k

#注意,当value值为4以上(-5以下)时,就会报错,索引位置超出了范围

3.4.2.2 索引(切片)

v = 'syxksyxk'
v1 = v[2:3] #2 <=索引位置 < 3
print(v1)
# 输出结果x
v2 = v[2:]
print(v2)
# 输出结果xksyxk
v3= v[:-1]
print(v3)
# 输出结果syxksyx

3.4.2.3 索引(步长)

name = 'syxksyxk'
val = name[0:-1:2]
print(val)
#输出结果sxsx
val = name[1:-1:2]
print(val)
#输出结果yky
val = name[1::2]
print(val)
#输出结果ykyk
val = name[::2]
print(val)
#输出结果sxsx
val = name[-1:0:-1]
print(val)
#输出结果kxyskxy
val = name[-1:0:-2]
print(val)
#输出结果kyky
#将字符串进行反转。
val = name[::-1]
print(val)
# 输出结果kxyskxys

4 数据类型的转换

(1)数字与字符串之间的转换

(2)数字转换成布尔值

    值为0时才为Flase,其他的都为True

(3)字符串转换成布尔值

    值为空才为false,其他的都为True

(4)布尔值转换成整型

    值为True,输出结果为1,值为False,输出结果为0

(5)布尔值转换为字符串

    值为True,结果为字符串的True,值为False,结果为字符串的False

#数字转布尔值(0是假,其他都是真)
v1 = bool(1)
v2 = bool(0)
print(v1,v2)
# 输出结果True False

#字符串转布尔值(""是假,其他都是真)
v1 = bool("hello")
v2 = bool("")
print(v1,v2)
# 输出结果True False

 

# 数字转字符串
v1 = 6
v2 = str(v1)

# 字符串转数字
v1 = "6"
v2 = int(v1)

# 字符串转布尔值
v1 = '' #值为空才为flase,其他的都为True
v2 = bool(v1)
print(v2)
# 输出的结果为Flase

# 将布尔(bool)值转换整型
v1 = True
v2 = int(v1)
print(v2)
#值为True,输出结果为1,值为Flase,输出结果为0

# 将布尔(bool)值转换字符串
v1 = True
v2 = str(v1)
print(v2)
#值为True,输出结果为字符串的True,值为Flase,输出结果为字符串的Flase

a="1"
b=2
c=int(a)+b
print(c)
# 输出的结果为:3
print(type(a),type(b),type(c))
# 输出的结果为:<class 'str'> <class 'int'> <class 'int'>

 

 

 

posted @ 2021-06-04 01:26  岁月星空  阅读(265)  评论(0编辑  收藏  举报