第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  岁月星空  阅读(314)  评论(0)    收藏  举报