四、学习py:数据类型

  1. 四、学习py:数据类型
    1. 1.整型
      1. 1.1定义
      2. 1.2独有功能
      3. 1.3公共功能
      4. 1.4转换
    2. 2.布尔类型
      1. 2.1定义
      2. 2.2独有功能
      3. 2.3公共功能
      4. 2.4转换
      5. 2.5其他
    3. 3.字符串类型
      1. 3.1定义
      2. 3.2独有功能(13/48)
        1. 3.2.1判断字符串是否是以xx开头?得到一个布尔值
        2. 3.2.2判断字符串是否以xx结尾?得到一个布尔值
        3. 3.2.3判断一个字符串是否为十进制数?得到一个布尔值
        4. 3.2.4去除字符串两边的空格、换行符、制表符、得到一个新的字符串
        5. 3.2.5字符串变成大写,得到一个新字符串
        6. 3.2.6字符串变成小写,得到一个新字符串
        7. 3.2.7字符串的内容的替换,得到一个新的字符串
        8. 3.2.8字符串切割,得到一个列表
        9. 3.2.9字符串拼接,得到一个新的字符串
        10. 3.2.10字符串格式化,得到新的字符串
        11. 3.2.11字符串转换为字节类型
        12. 3.2.12将字符串内容居中,居左,居右
        13. 3.2.13 填充0
        14. 3.2.14补充函数random(后面会写random模块)
      3. 3.3公共功能
        1. 3.3.1相加(str+str)
        2. 3.3.2相乘(str*int)
        3. 3.3.3长度
        4. 3.3.4获取字符串中的字符,基于索引
        5. 3.3.5获取字符串中的子序列,切片
        6. 3.3.6步长
        7. 3.3.7循环
      4. 3.4类型转换
      5. 3.5字符串不可被修改
    4. 4.列表(list)
      1. 4.1定义
      2. 4.2独有功能
        1. 4.2.1追加,在原列表中尾部追加值
        2. 4.2.2批量追加
        3. 4.2.3插入,在原列表的指定位置插入值
        4. 4.2.4在原列表中根据值删除(从左到右找到第一个删除)【如果里面找不到那个值就会报错】
        5. 4.2.5在原列表中根据索引删除某个元素
        6. 4.2.6清空原列表
        7. 4.2.7根据值获取索引(从左到右找到第一个删除)【慎用,找不到报错】
        8. 4.2.8列表元素排序
        9. 4.2.9反转原列表
      3. 4.3公共功能
        1. 4.3.1相加
        2. 4.3.2相乘
        3. 4.3.3运算符in包含
        4. 4.3.4获取长度
        5. 4.3.5索引
        6. 4.3.6切片
        7. 4.3.7步长
        8. 4.3.8思维拓展(实现一个删除姓董的功能)
      4. 4.4类型的转换
      5. 4.5嵌套
    5. 5.元组
      1. 5.1定义
      2. 5.2独有功能
      3. 5.3公共功能
      4. 5.4转换
      5. 5.5嵌套
        1. 5.5.1应用扩展,实现用户登陆
    6. 6.集合(set)
      1. 6.1定义
      2. 6.2独有功能
        1. 6.2.1添加元素
        2. 6.2.2删除元素
        3. 6.2.3交集
        4. 6.2.4并集
        5. 6.2.5差集
      3. 6.3公共功能
        1. 6.3.1减,就是计算差集
        2. 6.3.2加,就是计算交集
        3. 6.3.3|,计算并集
        4. 6.3.4长度
        5. 6.3.5for循环
      4. 6.4转换
      5. 6.5其他
        1. 6.5.1集合的储存原理
        2. 6.5.2元素必须可哈希(所以会存在hash碰撞后面会说)
        3. 6.5.3查找的速度特别快
        4. 6.5.4对比和嵌套
    7. 7.字典(dict)
      1. 7.1定义(键必须是可哈希的)
        1. 7.1.1一般什么时候使用字典
      2. 7.2独有功能
        1. 7.2.1获取值
        2. 7.2.2所有的键
        3. 7.2.3所有的值
        4. 7.2.4所有的键值
        5. 7.2.5更新字典键值对
        6. 7.2.6一处指定键值对
        7. 7.2.6案例扩展
      3. 7.3公共功能
        1. 也差不多啦,并集,长度,是否包含,索引(键),根据键修改值和删除值,for循环
      4. 7.4转换和嵌套
    8. 8.浮点型(float)

四、学习py:数据类型

1.整型

1.1定义

number = 10
age = 123

1.2独有功能

v1 = 5
#调用v1的独有功能,获取v1的二进制有多少个位组成。
result = v1.bit_length()
print(result)#3

1.3公共功能

加减乘除

v1 = 2
v2 = 3
v3 = v1 + v2

1.4转换

image-20211228212654320

2.布尔类型

2.1定义

dhk_is_a_joker = True
yj_is_wired = False

2.2独有功能

2.3公共功能

2.4转换

使用函数bool() 任何的数据类型都能够转换成布尔类型

注:只有整数0、空字符、空元组、空列表、空字典转换为布尔值的时候均为False

2.5其他

如果在if while 条件后面写一个值当做条件时,他会默认转换为布尔类型,然后再做条件判断。

3.字符串类型

用来表示文本信息。

3.1定义

v1 = "dhk小丑"
v5 = """"
dhk
他就是一个小丑
"""
print(v5)

3.2独有功能(13/48)

"xxx".功能(...)
v1 = "xxx"
v1.功能(...)

3.2.1判断字符串是否是以xx开头?得到一个布尔值

v1 = "xx is joker"
result = v1.startswith("xx")      

3.2.2判断字符串是否以xx结尾?得到一个布尔值

v1 = "xx is joker"
result = v1.endswith("joker")

3.2.3判断一个字符串是否为十进制数?得到一个布尔值

v1 = "123"
result = v1.isdecimal()

3.2.4去除字符串两边的空格、换行符、制表符、得到一个新的字符串

在我的第一篇py博客里面有

额但是方便查阅的话我还是在这里写一下

去两边空格:str.strip()

去左空格:str.lstrip()

去右空格:str.rstrip()

去两边字符串:str.strip(‘d’),相应的也有lstrip,rstrip。

补充:strip可以去除空格、换行符、制表符,不仅仅是空格。

3.2.5字符串变成大写,得到一个新字符串

msg = "dhk is a joker"
data = msg.upper()

3.2.6字符串变成小写,得到一个新字符串

msg = "dhk is a joker"
data = msg.lower()

3.2.7字符串的内容的替换,得到一个新的字符串

data = "動感是一個小丑"
value = data.replace("動感","dhk")
#案例
char_list = ["尼瑪","sb"]
content = input("請輸入評論")
for item in char_list:
    content = content.replac(item,"*")
print(content)

3.2.8字符串切割,得到一个列表

data = "dhk|joker|小丑"
result = data.split('|')
print(result)
#输出
#['dhk', 'joker', '小丑']
#也不一定非要用|你也可以用其他的比如逗号之类的。
#同时也可以用变量来接受每一个列表中的元素,但是变量的数量必须要等于元素的数量。

注:1.也可以指定切几个,data.split(‘|’,1),这个就是只切一个。

2.rsplit()就是从右边开始切。

3.2.9字符串拼接,得到一个新的字符串

data_list = ["dhk","is","joker"]
result = "*".join(data_list)
print(result)
#输出
#dhk*is*joker
#当然也可以什么都不加

3.2.10字符串格式化,得到新的字符串

也在第二篇出现过

name = "越江"

age = 123

text = "我叫%s ,今年%s岁." %(name,age)
text = "我叫{0},今年{1}岁,真正的名字叫做{0}".format("越江","99")
text = "我叫{n1}".format(n1 = "越江")
#data = text.format(n1="越江")
#模板复用
dhk = "動感"
age = 12
text = f"{dhk}是一個小丑,今年{age:#b}岁了"
#将数字转换成二进制进行显示(一个扩展罢了,其中进制的代表符号和数电里面一样。)

3.2.11字符串转换为字节类型

data = "动感"#unicode,字符串类型
v1 = data.encode("utf-8")#字节类型

3.2.12将字符串内容居中,居左,居右

v1 = "动感"
data = v1.center(20,"*")#将动感放在中间,左边放*右边放*,凑成20个字符
print(data)
#输出
#*********动感*********

还有ljust()和rljust,就不多赘述。

3.2.13 填充0

data = "dhk"
data = data.zfill(10)
print(data)
#输出
#0000000dhk
#虽然和rjust差不多,但是zill更多的适用于处理二进制数据。

3.2.14补充函数random(后面会写random模块)

    import random
    code = random.randrange(1,123)#随机生成一个1-123的数字
    print(code)

3.3公共功能

3.3.1相加(str+str)

v1 = "dhk" + "joker"

3.3.2相乘(str*int)

data = "dhk" * 3
print(data)#dhkdhkdhk

3.3.3长度

data = "dhk"
v1 = len(data)

3.3.4获取字符串中的字符,基于索引

msg = "dhk is a jocker"
print(msg[0])
print(msg[2])
#d
#k
print(msg[-1])#r,就是倒着取

注:字符串中只能通过索引取值,不能修改值【字符串在内部存储时是不允许对内部元素进行修改的。】

ex:

message = "dhk is a joker"
index = 0
while index<len(message):
    value = message[index]
    print(value)
    index += 1
#展示message里面的所有字符,感觉有点像php中的变量覆盖。

3.3.5获取字符串中的子序列,切片

message = "动感是小丑"
message[0:2]#动感(前取后不取,记得是从0开始)
message[3:5]#小丑
message[3:-1]#小
message[0:len(message)]#动感是个小丑
message[0:]#动感是个小丑

注:同样也只能读取数据

3.3.6步长

message = "动感是小丑"
message[0:2]#动感(前取后不取,记得是从0开始)
message[0:5:2]#隔一个取一个

3.3.7循环

while循环

message = "dhk is a joker"
index = 0
while index<len(message):
    value = message[index]
    print(value)
    index += 1

for循环

message = "动感是小丑"
for char in message:
    print(char)#char在这里是一个变量
#显示结果和上面的while循环一样

range,帮助我们创建一些列的数字。

range(10)#[0,1,2,3,4,5,6,7,8,9]
range(1,10)#[1,2,3,4,5,6,7,8,9]
#同样也可以加入步长。步长为-1则为倒叙。
message = "动感是小丑"
for i in range( len(message) ):
    print(message[i])

扩充:一般的循环运用场景

while:一般在做无限制(未知)循环此处时使用#比如说让用户输入整数,不是整数就不结束,是整数就直接结束。

for:已知循环循环数量的时候使用。

3.4类型转换

str()

3.5字符串不可被修改

4.列表(list)

列表,是一个有序且可变的容器,在里面可以存放多不同类型个元素

4.1定义

user_list = ["dhk","小丑","动感"]
number_list = [1,2,1123,-1]
data_list = [1,True,"动感"]
user_list = []
user_list.append("动感")
user_list.append("joker")
print(user_list)
#输出
#['动感', 'joker']

4.2独有功能

python中为所有的列表类型的数据提供了一批独有的功能。

这里之介绍常用的功能

4.2.1追加,在原列表中尾部追加值

user_list = []
user_list.append("动感")
user_list.append("joker")
print(user_list)
#输出
#['动感', 'joker']
#案例
user_list = []
while True:
    user = input("请输入用户名(q或Q退出)")
    if user.upper() == "Q":
        break
    user_list.append(user)
    print(user_list)
#案例2
user_list = []
hello = "欢迎来到越江的第一个游戏"
print(hello.center(30, "*"))
h = 1
f = True
while f:
    user_number = input("请输入要参加游戏的玩家数量: ")
    if  not user_number.isdecimal():
        print ("请输入一个数字!fuck u !")

    else:
        f = False

number = int(user_number)
while h<= number:
    username = input(f"请输入玩家姓名({h}/{number})")
    user_list.append(username)
    h = h +1
print(user_list)

4.2.2批量追加

name = []
name.extend([11,22,33])

4.2.3插入,在原列表的指定位置插入值

name = ["dhk","xiaochou"]
name.insert(1,"动感")

4.2.4在原列表中根据值删除(从左到右找到第一个删除)【如果里面找不到那个值就会报错】

name = ["xiaochou","dhk"]
name.remove("dhk")

4.2.5在原列表中根据索引删除某个元素

name = ["小丑","动感","joker"]
name.pop()#删除最后一个
name(1)#删除动感

注:用了pop之后数据类型变为str

4.2.6清空原列表

user_list = ["xiaohcou","dongan"]
user_list.clear()

4.2.7根据值获取索引(从左到右找到第一个删除)【慎用,找不到报错】

user_list = ["xiaohcou","dongan"]
if "dongan" in user_list:
    index = user_list.index("dongan")
    print(index)
else:
    print("不存在")

4.2.8列表元素排序

#数字排序
num_list = [1,2,3,5,4]
num_list.sort()#从小到大排序
num_list.sort(reverse=True)#从大到小排序
print(num_list)
#字符串排序
name = ["动感","jocker","dhk是一个小丑"]
#sort原理:转换成unicode然后再进行比较
name.sort()

注意:请数据类型统一的时候进行比较,不然会报错。

4.2.9反转原列表

name = ["xiaochou","dhk","jocker"]
name.reverse()

4.3公共功能

4.3.1相加

4.3.2相乘

列表*整型 将列表中的元素再创建n份拼接在列表后面并生成一个新的列表。

4.3.3运算符in包含

用来判断元素是否在列表中,返回一个布尔值。

注意:in关键字判断元素是否在列表中是一个一个判断的,效率低下。

在后面会介绍高效率的方法。

4.3.4获取长度

name = ["xiaochou","dhk","jocker"]
print(len(name))

4.3.5索引

name = ["xiaochou","dhk","jocker"]
print(name[2])
#扩展基于索引的删除
del name[0]
print(name)

4.3.6切片

name = ["xiaochou","dhk","jocker"]
print(name[0:2])

4.3.7步长

name = ["xiaochou","dhk","jocker"]
print(name[0:2:1])

4.3.8思维拓展(实现一个删除姓董的功能)

首先补充一个函数range

range(stop)
range(start, stop[, step])
user_list = ["董小丑","董动感","joker","董礼仪","嘿嘿我不姓董"]
for index in range(len(user_list)-1,-1,-1):#这里记住是前取后不取
    item = user_list[index]
    if item.startswith("董"):
        user_list.remove(item)
print(user_list)
#这里是从后面开始删除用户的,这样做的好处就是不会打乱前面的用户在列表中的顺序。

4.4类型的转换

很少会用到列表的数据转换。但是为了凑齐这个目录我还是把这个写上。

(๑╹◡╹)ノ”

4.5嵌套

列表属于容器,内部可以存放各种数据,所以他也支持列表的嵌套。

data = ["小丑",["dhk","joker"],True,[11,22,33],"动感"]
print(data[0])#小丑
print(data[1][1])#joker
#当然除了索引还有增加,删除都是可以这样操作的,感觉有点像二维数组又不是那么像。

5.元组

元组是一个有序且不可变的容器,在里面可以存放多个不同类型的元素。

5.1定义

v1 = (11,22,33)

建议:在元组最后加一个逗号,用于表示他是一个元组。

d1 = (1)#python在处理的时候会把他当作整型1
d2 = (1,)#元组

5.2独有功能

没有哦!

(*´▽`)ノノ

5.3公共功能

其实也和列表差球不多,相加 相乘 获取长度 索引 切片 步长 for循环

5.4转换

其他类型转换为元组,使用tuple(),目前只有字符串和列表可以转换为元组。

name = "dhk"
data = tuple(name)
print(data)#('d', 'h', 'k')

5.5嵌套

由于元组和列表都可充当容器,他们内部可以放很多元素,也支持元素内的各种嵌套。

注意:元组中的列表可以修改内容但是不能对这个列表整个进行修改,因为这个列表属于元组的一个元素。

ex:

data = ([1,2],(1,2,3),)

5.5.1应用扩展,实现用户登陆

#首先是原来的数据里面就有两个用户
user_list = [("dhk","joker"),("hi","nihao")]
#先让用户创建一个账户
i = 0
while i<1:
    a = input("请输入你的账户:")
    if not a.isdecimal():
        print("请输入纯数字账户!")
        continue
    else:i += 1
while i<2:
    b = input("请输入您要的密码: ")
    if not b.isdecimal():
        print("请输入纯数字密码!")
        continue
    i += 1
item = (f"{a}",f"{b}")#这里还是用列表比较好,因为方便修改密码,但是因为学到元组了就用这个。
user_list.append(item)
#然后这里假设这个用户要登陆了,来调取账户进行比对。
a = True
b = True
username = user_list[2][0]
userpwd = user_list[2][1]

while b:
    name = input("请输入您的账户: ")
    if name == username:
        b= False
    else:print("请输入正确的账户")
while a:
    paswod = input("请输入您的密码: ")
    if paswod == userpwd:
        print("登录成功")
        a= False
    else :
        print("密码错误")

6.集合(set)

集合是一个无序,可变,不允许数据重复容器。

6.1定义

v1 = {11,22,33,"dhk"}

注意:

1.因为是无序(虽然这里看着有顺序但是在系统处理中是没有顺序的)的,所以无法通过索引取值。

2.但是可以添加和删除数据。

3.也不允许数据重复

4.一般在维护一大堆不重复的数据时,就可以用它。比如说:做爬虫去网上找图片链接,为了避免链接重复,就可以用集合来存储图片的地址

5.定义空集合的时候只能使用

v = set()#定义集合
v = {}#定义的是空字典

6.2独有功能

6.2.1添加元素

data = {"dhk","xiaochou","joker"}
data.add("动感")

6.2.2删除元素

data = {"dhk","xiaochou","joker"}
data.discard("dhk")

6.2.3交集

s1 = {"dhk","joker"}
s2 = {"动感","dhk"}
s3 = s1 & s2 #方式一
s4 = s1.intersection(s2)#方式2

6.2.4并集

s1 = {"dhk","joker"}
s2 = {"动感","dhk"}
s3 = s1 | s2#方式1
s4 = s1.union(s2)#方式2

6.2.5差集

s1 = {"dhk","joker"}
s2 = {"动感","dhk"}
s3 = s1 - s2#方式1 s1中有且s2没有的值
s4 = s1.difference(s2)#方式2 s1中有且s2没有的值

6.3公共功能

6.3.1减,就是计算差集

6.3.2加,就是计算交集

6.3.3|,计算并集

6.3.4长度

s1 = {"dhk","joker"}
data = len(s1)

6.3.5for循环

s1 = {"dhk","joker"}
for item in s1:
    print(item)

6.4转换

使用set()进行转换,如果数据有重复的话会自动剔除。

注:int\list\tuple\dict都可以转化成集合

6.5其他

6.5.1集合的储存原理

image-20211229211248169

6.5.2元素必须可哈希(所以会存在hash碰撞后面会说)

根据储存原理,集合的元素必须是可哈希的值。

data = hash("动感")
print(data)#6995344959373892725

目前可哈希的数据类型:int\bool\str\tuple,而list、set是不可哈希的

总结:集合的元素只能是:整型,布尔,字符串,元组

(27条消息) 哈希表冲突及处理冲突的方法_Hello_GY 的博客-CSDN博客_哈希表冲突

6.5.3查找的速度特别快

因为储存原理的特殊,集合的查找效率特别快

user_name = {"xiaochou","动感","dhk"}
if "dhk" in user_name:
    print("在")
else:
    print("不在")

6.5.4对比和嵌套

image-20211229212513337

在嵌套的时候注意,由于true和false本质上是1和0,所以在集合里面不能同时出现true和1

v1 = {True,1}
print(v1)#{True}

v1 = {1,True}
print(v1)#{1}

7.字典(dict)

字典是无序(py3.6之后就是有序的),键不重复且元素只能是键值对的可变的容器

键不重复,重复就会被覆盖

data = {"k1":1,"k1":2}
print(data)#{'k1': 2}后面覆盖前面的

7.1定义(键必须是可哈希的)

v1 = {}
v2 = dict()#都是定义空字典
#案例
data = {"age":99,
        "status":True,
        "name":"dhk",
        "hobby":["马戏团","小丑"],
        }
print(data)

注意:在嵌套的时候注意,由于键必须是可哈希的,所以键的嵌套中不能使用字典。

7.1.1一般什么时候使用字典

当我们像表示一组固定信息的时候,用字典可以更加的直观。

7.2独有功能

7.2.1获取值

info = {"age":99,
        "status":True,
        "name":"dhk",
        "hobby":["马戏团","小丑"],
       }
data = info.get("age")
print(data)#99
data1 = info.get("joker")
if data1 == None:#键不存在,默认返回None
    print("键不存在")

7.2.2所有的键

info = {"age":99,
        "status":True,
        "name":"dhk",
        "hobby":["马戏团","小丑"],
       }
data = info.keys()
print(data)#dict_keys(['age', 'status', 'name', 'hobby'])
#这个输出的东西是可以被for循环的

7.2.3所有的值

info = {"age":99,
        "status":True,
        "name":"dhk",
        "hobby":["马戏团","小丑"],
       }
data = info.values()
print(data)#dict_values([99, True, 'dhk', ['马戏团', '小丑']])

7.2.4所有的键值

info = {"age":99,
        "status":True,
        "name":"dhk",
        "hobby":["马戏团","小丑"],
       }
data = info.items()
print(data)dict_items([('age', 99), ('status', True), ('name', 'dhk'), ('hobby', ['马戏团', '小丑'])])

7.2.5更新字典键值对

info = {"age":99,
        "status":True,
        "name":"dhk",
        "hobby":["马戏团","小丑"],
       }
info.update({"sex":"男","name":"joker"})
print(info)#info中没有的键直接添加,有的键则更新值

7.2.6一处指定键值对

info = {"age":99,
        "status":True,
        "name":"dhk",
        "hobby":["马戏团","小丑"],
       }
data = info.pop("age")
print(info)#{'status': True, 'name': 'dhk', 'hobby': ['马戏团', '小丑']}
print(data)#99

7.2.6案例扩展

'''
实现输出一个人的个人信息格式如下
name = ['名字',"性别","年龄"]
'''
info_stock = {"动感":["动感","男","99"],
              "小丑":["小丑","男","13"],
              "董小丑":["董小丑","男","123"]
              }
num = input("请输入您要查询的人物: ")
if  not num in info_stock.keys():
    print("请输入正确的人名!")
else:
    data = info_stock.get(num)
    print(f"{num} = {data}")

7.3公共功能

也差不多啦,并集,长度,是否包含,索引(键),根据键修改值和删除值,for循环

7.4转换和嵌套

先要转换为字典使用dict()

在嵌套的时候,注意键值必须可hash(list,set,dict不可hash)

这里总结一下,集合元组必须可hash,字典的键必须可hash。

8.浮点型(float)

浮点型,一般在开发中用于表示小数。

注意三点,

1.在类型转换时,浮点型转换为整型,将会把小数部分去掉。

2.想保留小数后n位

v1 = 3.1415926
result = round(v1,3)#会自动的给你四舍五入

3.想要遇到精准的小数计算,需要使用decimal模块

import decimal
v1 = decimal.Decimal("0.1")
v2 = decimal.Decimal("0.2")
v3 = v1 + v2
print(v3)#0.3

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。后续可能会有评论区,不过也可以在github联系我。