知识点
前提概要
每种数据类型都有自己的特点及应用场景,以后的开发中需要根据实际的开发情况选择合适的数据类型。
结构相似的一些数据,有一些共同特征的数据的集合就是数据类型
每种数据类型按照以下4个维度
定义(怎么样的数据),叫哪一类数据类型
独有功能(这些数据类型具有的独有功能)
公共功能(这些数据类型共同具有的功能)
类型转换(怎样把一个数据类型,转换成另一个数据类型)
其他
整型 整型其实就是十进制整数的统称,比如:1、68、999都属于整型。它一般都用于表示年龄、序号等。
定义
独有功能
1 result1 = v1.bit_length()
例如:
1 2 3 4 5 6 7 8 9 10 11 v1 = 5 print (bin (v1)) result1 = v1.bit_length() print (result1) v2 = 10 print (bin (10 )) result2 = v2.bit_length() print (result2)
公共功能
1 2 3 v2 = 8 v3 = v1 + v2 print (v3)
类型转换
在项目开发和面试题中经常会出现一些“字符串”和布尔值转换为整型的情况。
布尔值转换为整型
1 2 n1 = int (True ) n2 = int (False )
字符串转整型
1 2 3 4 5 6 7 8 9 10 11 12 v1 = int ("186" ,base=10 ) v2 = int ("0b1001" ,base=2 ) v3 = int ("0o144" ,base=8 ) v4 = int ("0x59" ,base=16 )
浮点型转整型
注:这里浮点型转整型的取整规则是趋0取整
其他 长整型 python3:整型(无限制)
python2:整型、长整型
在python2中跟整数相关的数据类型有两种:int(整型)、long(长整型),能表示的值范围不同。
1 2 3 4 5 6 v1 = 9223372036854775807 v2 = 9223372036854775808
long,整数值超出int范围之后自动会转换为long类型(无限制)。
在python3中去除了long只剩下:int(整型),并且int长度不再限制。
地板除 1 2 3 4 5 6 7 v1 = 9 /2 print (v1) v1 = 9 /2 print (v1)
python2中两个值相除时,默认进行地板除,只保留整数位。(python3中默认会保留小数)。
布尔类型 布尔值,其实就是“真”,“假”
定义 1 2 data = False alex_is_sb = True
独有功能 无
公共功能 加减乘除
1 2 v1 = True + True print (v1)
注:没有实际意义看看就行
转换
任何的数据类型都能转换成bool类型
在以后的项目开发中,会经常使用其他类型转换为布尔值的情景,此处只要记住一个规律即可
整数0、空字符串、空列表、空字典、转换为布尔值时均为False,其他均为True
其他 做条件自动转换
如果在if 、while条件后面写一个值当做条件时,它会默认转换为布尔类型,然后再做条件判断。
1 2 3 4 5 6 7 8 9 10 11 if 0 : print ("太六了" ) else : print (999 ) if "武沛齐" : print ("你好" ) if "alex" : print ("你是傻逼?" ) else : print ("你是逗比?" )
注:计算机会将if后面的语句转换为bool类型,如果为True就执行if冒号下面的语句,如果为False就执行else下面的语句
1 2 3 4 5 6 7 while 1 > 9 : pass if 值: pass while 值: pass
字符串类型 字符串,我们平时会用它来表示文本信息。例如:姓名、地址、自我介绍等。
定义 1 2 3 4 5 6 7 8 9 10 v1 = "包治百病" v2 = '包治百病' v3 = "'包‘治百病" v4 = '"包"治百病' v5 = """ 吵架都是我的错 因为大家打不过 """
独有功能(18/48) 基本格式:
1 2 3 4 5 6 7 "xxxxx" .功能(...)v1 = "xxxxx" v1.功能(...)
判断字符串开头 判断一个字符串是否以xx开头,得到一个布尔值。
1 2 3 4 5 6 7 8 9 10 11 12 13 v1 = "叨逼叨的一天,烦死了" result = v1.startswith("叨逼" ) print (result) v1 = input ("请输入住址:" ) if v1.startswith("北京市" ): print ("北京人口" ) else : print ("非北京人口" )
判断字符串结尾 判断一个字符串是否以xx结尾,得到一个布尔值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 v1 = "叨逼叨的一天,烦死了" result1 = v1.endswith("烦死" ) result2 = v1.endswith("烦死了" ) print (result1) print (result2) address = input ("请输入地址:" ) if address.endswith('村' ): print ("农业户口" ) else : print ("非农户口" )
判断字符串为十进制数 判断字符串是否为一个十进制数,得到一个布尔值
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 1 = "1238871" result = v1.isdecimal() print (result) v1 = input ("请输入值:" ) v2 = input ("请输入值:" ) if v1.isdecimal() and v2.isdecimal(): data = int (v1) + int (v2) print (data) else : print ("请正确输入数字" ) v1 = "123" print (v1.isdecimal()) v2 = "①" print (v2.isdecimal()) v1 = "123" print (v1.isdigit()) v2 = "①" print (v2.isdigit())
去除字符串两边字符 去除字符串两边的 空格、换行符、制表符,得到一个新的字符串。
1 2 data = input ("请输入内容:" ) print (data)
去除两边空格:
1 2 3 4 msg = " H e ll o啊,树哥 " data = msg.strip() print (data)
去除左边空格:
1 2 3 4 msg = " H e ll o啊,树哥 " data = msg.lstrip() print (data)
去除右边空格:
1 2 3 4 msg = " H e ll o啊,树哥 " data = msg.rstrip() print (data)
补充:strip也可以去除 空格、换行符、制表符。
换行符(\n):该符号输入进程序,会自动换行。
制表符(Tap键,\t):输入之后会默认加入一个制表符
1 2 3 4 5 6 7 code = input ("请输入4位验证码:" ) data = code.strip() if data == "FB87" : print ('验证码正确' ) else : print ('验证码错误' )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 msg = "哥H e ll o啊,树哥" data = msg.strip("哥" ) print (data)msg = "哥H e ll o啊,树哥" data = msg.lstrip("哥" ) print (data)msg = "哥H e ll o啊,树哥" data = msg.rstrip("哥" ) print (data)
字符串变大写 字符串变大写,得到一个新字符串
1 2 3 4 msg = "my name is oliver queen" data = msg.upper() print (msg) print (data)
注意:.upper()只是创建新的变量把大写后的值赋给新变量,而原变量不变
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 code = input ("请输入4位验证码:" ) value = code.upper() data = value.strip() if data == "FB87" : print ('验证码正确' ) else : print ("验证码错误" ) ''' code的值”fb88 “ value的值”FB88 “ data的值”FB88“ '''
字符串变小写 字符串变小写,得到一个新字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 data = "你是个好人,但是好人不合适我" value = data.replace("好人" ,"贱人" ) print (data) print (value) video_file_name = "高清无码爱情动作片.mp4" new_file_name = video_file_name.replace("mp4" ,"avi" ) final_file_name = new_file_name.replace("无码" ,"步兵" ) print (final_file_name)video_file_name = "高清无码爱情动作片.mp4" new_file_name = video_file_name.replace("mp4" ,"avi" ) final_file_name = video_file_name.replace("无码" ,"步兵" ) print (final_file_name)content = input ("请输入评论信息" ) content = content.replace("草" ,"**" ) content = content.replace("泥马" ,"***" ) print (content)
注:每次都赋值给content变量,是为了节省变量的使用
1 2 3 4 5 6 7 8 案例 char_list = ["草拟吗" ,"逗逼" ,"二蛋" ,"钢球" ] content = input ("请输入评论信息" ) for item in char_list: content = content.replace(item,"**" ) print (content)
字符串切割 字符串切割,得到一个列表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 data = "武沛齐|root|wupeiqi@qq.com" result = data.split('|' ) print (data) print (result) info = "武沛齐,root" user_list = info.split(',' ) user = input ("请输入用户名:" ) pwd = input ("请输入密码" ) if user == user_list[0 ] and pwd == user_list[1 ]: print ("登录成功" ) else : print ("用户名或密码错误" )
控制切割次数
1 2 3 4 5 6 7 8 data = "武沛齐|root|wupeiqi@qq.com" v1 = data.split("|" ) print (v1)v2 = data.split("|" ,1 ) print (v2)
再拓展:
切割的方向从右往左切割
1 2 3 4 5 6 7 8 9 data = "武沛齐,root,wupeiqi@qq.com" v1 = data.rsplit(',' ) print (v1)v2 = data.rsplit(',' ,1 ) print (v2)
应用场景:
1 2 3 4 5 6 7 file_path = "xxx/xxxx/xx.xx/xxx.mp4" data_list = file_path.rsplit("." ,1 ) data_list[0 ] data_list[1 ]
字符串拼接 字符串拼接,得到一个新的字符串
1 2 3 4 data_list = ["alex" ,"是" ,"大烧饼" ] v1 = "*" .join(data_list) print (v1)
字符串格式化 格式化字符串,得到新的字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 name = "{0}的喜欢干很多行业,例如有:{1}、{2}等" data = name.format ("老王" ,"护士" ,"嫩模" ) print (data) print (name) name = "{}的喜欢干很多行业,例如有:{}、{}等" data = name.format ("老王" ,"护士" ,"嫩模" ) print (data) name = "{name}的喜欢干很多行业,例如有:{h1}、{h2}等" data = name.format (name="老王" ,h1="护士" ,h2="嫩模" ) print (data)
字符串转字节类型 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 data = "嫂子" v1 = data.encode("utf-8" ) v2 = data.encode("gbk" ) print (v1) print (v2)
延伸:字节类型转换回字符串类型
1 2 3 4 5 s1 = v1.decode("utf-8" ) s2 = v2.decode("gbk" ) print (s1)print (s2)
字符串居左、中、右 居中:
1 2 3 4 5 6 7 v1 = "王老汉" data = v1.center(20 ,"*" ) print (data)
居左:
1 2 3 4 5 6 7 v1 = "王老汉" data = v1.ljust(21 ,"-" ) print (data)
居右:
1 2 3 4 5 6 7 v1 = "王老汉" data = v1.rjust(21 ,"-" ) print (data)
字符串输出填充 Zfill (帮助你填充0)类似于居左、中、右,但居左、中、右这更灵活
1 2 3 4 5 6 7 8 9 data = "alex" v1 = data.zfill(10 ) print (v1) data = "101" v1 = data.zfill(8 ) print (v1)
了解更多独有功能 更多的字符穿独有功能,可以通过pycharm中python的源码区了解
打开pycharm中python源码的操作步骤
在pycharm中输入str
按住键盘的一个按键
Windows用户按:ctrl键
Mac用户按:cmd键
之后把鼠标放在str上(此时鼠标会变成一个小手)
点击鼠标左键(此时就跳转到了python的源码中)
公共功能 相加 字符串+字符串
1 2 v1 = "alex" + "大sb" print (v1)
相乘 字符串*整数
1 2 data = "嫂子" * 3 print (data)
求长度
1 2 3 4 5 6 7 8 data = "嫂子满身大汉" value = len (data) print (value) data = "dasdasd" value = len (data) print (value)
获取字符、索引 1 2 3 4 5 6 7 8 9 10 message = "来做点py交易呀" print (message[0 ]) print (message[1 ]) print (message[2 ]) print (message[-1 ]) print (message[-2 ]) print (message[-3 ])
注意:字符串只能通过索引来取值,无法修改值。【字符串在内部存储时不允许对内部元素修改,想修改只能重新创建。】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 message[0 ] = "去" message = "来做点py交易呀" index = 0 while index < len (message): value = message[index] print (value) index += 1 message = "来做点py交易呀" index = len (message) - 1 while index >= 0 : value = message[index] print (value) index -= 1
获取字符串中的子序列、切片 获取字符串中的子序列、切片(与索引相似,只不过索引是获取里面的某个字符,切片获取的是这里面的某些字符)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 message = "来做点py交易呀" text = message[0 :2 ] print (text) print (message[3 :7 ]) print (message[3 :]) print (message[:5 ]) print (message[4 :-1 ]) print (message[4 :-2 ]) print (message[4 :len (message)])
注:字符串中的切片只能读取数据,无法修改数据。【字符串在内部存储时不允许对内部元素修改,想修改只能重新创建。】
1 2 3 4 message[0 :2 ] = "去搞" message = "来做点py交易呀" value = message[:3 ] + "python" + message[5 :] print (value)
跳跃取字符串内容 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 name = "生活不是电影,生活比电影苦" print (name[0 :5 :2 ]) print (name[:8 :2 ]) print (name[2 ::3 ]) print (name[::2 ]) print (name[8 :1 :-1 ]) value = name[::-1 ] value = name[-1 ::-1 ] print (value)
循环
1 2 3 4 5 6 message = "来做点py交易呀" index = 0 while index < len (message): value = message[index] print (value) index += 1
1 2 3 message = "来做点py交易呀" for char in message: print (char)
1 2 3 4 5 range (10 ) range (1 ,10 ) range (1 ,10 ,2 ) range (10 ,1 ,-1 )
1 2 3 4 5 6 7 8 message = "来做点py交易呀" for i in range (5 ): message[i] for i in range (len (message)): print (message[i])
索引除了以上两种还可以:
1 2 3 message = "来做点py交易呀" for char in message: print (char)
1 2 3 4 5 6 7 8 9 10 11 while True : ... num = 0 while True : data = input ("请输入内容:" ) if data.isdecimal(): num = int (data) else : print ("输入错误,请重新输入!" )
1 2 3 4 5 6 message = "来做点py交易呀" for char in message: print (char) for i in range (30 ): print (message[i])
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 message = "来做点py交易呀" for char in message: if char == "p" : continue print (char) 来 做 点 y 交 易 呀 message = "来做点py交易呀" for char in message: if char == "p" : break print (char) 来 做 点
1 2 3 4 for i in range (5 ): print (i) for j in range (3 ): print (j)
如果在内循环出现了break 和 continue只影响当前循环,不影响外面循环
1 2 3 4 5 for i in range (5 ): print (i) for j in range (3 ): break print (j)
转换 1 2 3 4 5 6 7 8 num = 999 data = str (num) print (data) data_list = ["alex" ,"eric" ,999 ] data = str (data_list) print (data)
一般情况下,只有整型转字符串才常用
其他 字符串不可被修改 字符串在创建之后不能被修改,我们所见到的是:修改好的字符串,去创建一个新的内存。
1 2 3 4 name = "武沛齐" name[1 ] name[1 :2 ]
索引或者切片并不是从字符串里面拿字符串,而是新创建了一个字符串,可以认为与原字符串没有关系
num_list = [11,22,33]
num_list[0] # 把11取出来 num_list[0] = 666 # 把列表里此位置的元素即11修改成666
总结
整型在Python2和Python3中的区别?
进制之间的转换。
其他类型转换为布尔类型时,空和0为False,其他均为Tr
条件语句中可自动化转换布尔类型来做判断
1 2 3 4 if "武沛齐" : print (666 ) else : print (999 )
字符串中常见的独有功能
字符串中常见的公共功能
字符串创建之后是不可以被修改的
补充 eval函数