Python基本数据类型详解 int/bool/str
Python的基本数据类型有以下几个类型,在我们实际中常用到的也是这几种类型,下面会跟大家介绍一下
- int,整数类型(整形)
- bool,布尔类型
- str,字符串类型
1.int类型
整型其实就是我们日常生活中所见到的数字,比如包子是五块,彩票可以买十块等等…
当然在计算机当中,整型其实就是十进制整数的统称,一般用来表示:年龄、序号、钱…
1.1 定义
# 定义整型
# 变量名 = 变量值
number = 10 # 数字10
age = 18 # 年龄是18
print(type(number),number) # type可以查看当前变量的类型
print(type(age),age)
1.2 独有功能
# 查看当前变量值二进制由多少位组成
v1 = 5
print(bin(v1)) # 0b101
# 调用 bit_length() 获取v1是由多少位组成的二进制
result = v1.bit_length()
print(result) # 3 说明是由三位组成的 (其中101表示二进制有几个数,所以是三位)
1.3 公共功能
# 加减乘除
v1 = 8
v2 = 4
re1 = v1 + v2
re2 = v1 - v2
re3 = v1 / v2
re4 = v1 * v2
re5 = v1 // v2
re6 = v1 % v2
1.4 转换
在项目开发或者面试的时候会出现一些“字符串”和布尔值转换为 整型的情况。下面举几个例子给大家看看
# 布尔值转整型
n1 = int(True) # True转换为整数 1
n2 = int(False) # False转换为整数 0
# 字符串转整型
v1 = int("186",base=10) # 把字符串看成十进制的值,然后再转换为 十进制整数,结果:v1 = 186
v2 = int("0b1001",base=2) # 把字符串看成二进制的值,然后再转换为 十进制整数,结果:v1 = 9 (0b表示二进制)
v3 = int("0o144",base=8) # 把字符串看成八进制的值,然后转换为 十进制整数,结果:v1 = 100 (0o表示八进制)
v4 = int("0x59",base=16) # 把字符串看成十六进制的值,然后转换为 十进制整数,结果:v1 = 89 (0x表示十六进制)
# 浮点型(小数)
v1 = int(8.7) # 8
在这我们可以只要通过 int() 就可以实现任意转换。
自创识别进制口诀:
2 b # 2b就是二进制
o 8 # 噢8就是八进制
x 16 # x16就是十六进制
1.5 其他
1.5.1 长整型
-
Python3: 整型(无限制大小)
-
Python2: 整型、长整型
-
需要注意的是在Python2当中有两种数据类型:
当然他们都是整数,但是他们代表了不同的区间范围
输出的后面带 L 的就是长整型, 没有带的就是整型
- int - 整型
- int,可表示的范围:-9223372036854775808~9223372036854775807
- long - 长整型
- long,整数值超出int范围之后自动会转换为long类型(无限制)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r1o7NaXo-1654613329928)(/Users/lishouwu/Library/Application Support/typora-user-images/image-20220329114635291.png)]
在Python3中就取出了Long只剩下了int类型,并且int类型没有长度的限制。
1.5.1 地板除
- Python2中除数有效小数则会直接省略值取整数
v1 = 9/2
print(v1) # 4
- Python3中则优化了这个问题,使得数据更为准确
v1 = 9/2
print(v1) # 4.5
2. 布尔类型
真真假假、假假真真、而布尔类型表达的就是真假,真的就是True,假的就是False,常用来作为判断条件使用
2.1 定义
data = Fasle
me_is_shuaibi = True
2.2 独有功能
无
2.3 公共功能
布尔值可以用来做运算
v1 = True + True
print(v1)
# 输出结果
2
v1 = True - False
print(v1)
# 输出结果
1
2.4 转换
在以后的开发过程中会经常使用到一些其他类型转换成布尔类型的场景,而我们只需要记住一个规律即可
整数0、空字符串、空列表、空集合、空字典。一切都是为空的都是False
其他都为True
练习demo:
# 练习题:查看一些变量为True还是False
v1 = bool(0) # False
v2 = bool(-10) # True
v3 = bool(10) # True
v4 = bool("是什么")# True
v5 = bool("") # False
v6 = bool(" ") # False
v7 = bool([]) # [] 表示空列表 # False
v8 = bool([11,22,33]) # [11,22,33] 表示非空列表 # True
v9 = bool({}) # {} 表示空字典 # False
v10 = bool({"name":"武泽天","age":18}) # {"name":"武泽天","age":18} 表示非空字典 # True
2.5 其他
2.5.1 做条件自动转换
如果在if、while 条件后面写一个值当做条件,他会默认将其转换成布尔值然后根据情况再去做条件判断
- if判断
# 1.判断条件为数字时,0默认为False
if 0:
print("666")
else:
print("999")
# 输出
999
# 2.字符串默认为True
if "武大郎":
print("卖的一手好烧饼!")
# 输出
卖的一手好烧饼!
# 3.条件对比 相等则返回True
name = "李大牛"
if name == "李大牛": # 判断是否相等 相等则返回ture
print("你真的好牛啊")
else:
print("你不是牛牛")
# 输出
你真的好牛啊!
- while判断
while 1 > 9 : # 1是不可能大于9的 所以while循环不执行
print("1是大于9的")
num = 0
while num < 5:
print("当前num等于:{}".format(num))
num += 1
print(num)
# 输出结果
当前num等于:0
当前num等于:1
当前num等于:2
当前num等于:3
当前num等于:4
5
3.字符串类型
字符串,我们平时会用它来表示文本信息。例如:姓名、地址、自我介绍等…
3.1 定义
# 定义字符串 可以用单引号、双引号、三引号包裹字符
name1 = '李大牛'
name2 = "李大牛"
name3 = """李大牛""" # 三者效果是一样的
# 三引号常用与文本内容太多的时候可以进行换行处理
name = """
askdasd
asdjaskdjasd
asdklasdasd
asasdl
"""
print(name)
3.2 字符串独有功能
- 字符串功能可以以两种形式调用
- 1.字符串直接调用
- “李大牛”.功能(…)
- 2.定义变量再进行使用
- name = “李大牛”
- name.功能(…)
- 1.字符串直接调用
1.判断字符串是否以xxx开头,并返回True or False
# 写法一
name = 'liszsjkdl'
print(name.startswith('li')) # 返回True
# 写法二
print('liszsjkdl'.startwith('li'))
1.1 需求:我需要判断用户是否为湖南省人
user_input = input("请输入你的籍贯")
if user_input.startwith("湖南"):
print("你是湖南人!")
else:
print("你不是湖南人")
2.判断字符串是否以xxx结尾,返回布尔值
name = 'liszsjkdl'
print(name.endswith("dl")) # True
print('liszsjkdl'.endswith('dl')) # True
2.1 需求:判断是否为农村户口
address = input("请输入地址:")
if address.endswith("村"):
print("农村户口")
else:
print("非农村户口")
3.检查字符串是否只包含十进制字符,返回布尔值
str1 = "12451"
str2 = "123as"
print(str1.isdecimal()) # 只包含十进制字符,返回True
print(str2.isdecimal()) # 包含字符串跟数字,返回False
3.1 两数相加,只有两个数是数字才相加,否则提示用户请输入数字!!!
num1 = input("请输入第一个数:")
num2 = input("请输入第二个数:")
if num1.isdecimal() and num2.isdecimal():
result = int(num1) + int(num2)
print(result)
else:
print("请输入数字!!!")
3.2 isdecimal()跟isdigit() 的区别
- 推荐使用isdecimal() 因为在python当中整型都是十进制字符
isdecimal() | 是否为十进制数字符,包括 Unicode 数字、双字节全角数字,不包括罗马数字、汉字数字、小数。 |
---|---|
isdigit() | 是否为数字字符,包括 Unicode 数字,单字节数字,双字节全角数字,不包括汉字数字,罗马数字、小数。 |
isnumeric() | 是否所有字符均为数值字符,包括 Unicode 数字、双字节全角数字、罗马数字、汉字数字,不包括小数。 |
示例: isdecimal区别为十进制数字符,而isdigit是数字字符涵盖范围广
v1 = "123"
print(v1.isdecimal()) # True
v2 = "①"
print(v2.isdecimal()) # False
v3 = "123"
print(v3.isdigit()) # True
v4 = "①"
print(v4.isdigit()) # True
4.去除字符串两边的空格、换行符、制表符,得到新字符串
4.1 去除两边空格
st1 = " sdasd "
print(st1.strip())
# 输出
sdasd
4.2 去除右边边空格
st1 = " sdasd "
print(st1.rstrip())
# 输出
sdasd
4.3 去除左边空格
st1 = " sdasd "
print(st1.ltrip())
# 输出
sdasd
5.字符串变大写,得到一个新字符串
# 1.将小写转换成大写
str1 = 'wodoushixiaoxie'
data = str1.upper() # 将小写转换成大写
print(data)
# 输出
WODOUSHIXIAOXIE
# 2.将小写转换成大写
str3 = "woshiDAXIEa"
data3 = str3.upper()
print(data3)
# 输出
WODOUSHIXIAOXIE
5.1 将验证码去除空格,并且转换成大写,避免用户输出错误
code = input("请输入验证码:")
value = code.strip().upper()
if value = "SZ9M":
print("验证码正确")
else:
print("验证码失败")
# 为什么需要转换?因为用户输入的时候可能会输入这样的,所以需要统一做处理
"""
sz9m
Sz9m
SZ9m
SZ9M
sz8M
"""
6.字符串变小写,得到一个新字符串
# 1.将小写转换成大写
str2 = 'WODOUSHIDAXIE'
data1 = str2.lower() # 将大写转换成小写
print(data1)
# 输出
wodoushidaxie
6.1 输入验证码,将验证码都转换成小写
code = input("请输入验证码:")
vlaue = code.strip().lower()
if value = "few0":
print("验证码正确")
else:
print("验证码错误")
7.替换字符串中的内容,得到一个新字符串
name = "皇家一号-墨菲特"
result = name.replace('墨菲特',"李二牛")
print(result) # 输出: 皇家一号-李二牛
print(name) # 输出: 皇家一号-墨菲特 # 需要注意的是,替换的并不会影响之前的字符串
7.1 需求:我需要将过滤敏感词,敏感词都替换成***
char_list = ['cnm','二蛋','妈的','sb']
content = input("请输入评论信息:")
for i in char_list :
content = content.replace(i,'***')
print(content)
# 输出
请输入评论信息:妈的
***
7.2 需求:将文本中的我改成你
content = "我和你,心连心,同住地球村。我爱你"
data = content.replace("我","你")
print(data)
# 输出
你和你,心连心,同住地球村。你爱你
8.字符串切分,得到一个新列表
# encoding: utf-8
# Author : limusen
# Datetime : 2022/3/29 4:58 下午
# File : 字符串切割.py
# explain : 文件说明
str1 = "li,mu,sen,shi,ni,die"
data = str1.split(',')
print(data)
# 输出
['li', 'mu', 'sen', 'shi', 'ni', 'die']
8.1 需求:用一个字符串存储了账号跟密码用逗号分割,取出账号密码,并登录
# encoding: utf-8
# Author : limusen
# Datetime : 2022/3/29 4:58 下午
# File : 字符串切割.py
# explain : 文件说明
user_info = "test1,123456"
data = user_info.split(',')
user_name = data[0]
user_pwd = data[1]
# print(user_name,user_pwd)
# # 输出
# # test1 123456
# 判断用户输入的账号密码是否跟取出来的一致
name = input("请输入用户名:")
pwd = input("请输入密码:")
if name == user_name and pwd == user_pwd:
print("登录成功")
else:
print("账号或密码错误!登录失败")
8.2 扩展知识,不是只能根据,号分割,是根据你传入的字段分割
data = "金刚川|血战钢锯岭|长津湖|长津湖2"
result = data.split("|")
print(result)
# 输出
['金刚川', '血战钢锯岭', '长津湖', '长津湖2']
data1 = "a.d.x.a.qw.ef.asf.asf.qw.f"
result1 = data1.split(".")
print(result1)
# 输出
['a', 'd', 'x', 'a', 'qw', 'ef', 'asf', 'asf', 'qw', 'f']
8.3 应用场景
file_path = "xxx/xxx/xxx/xx/xx.mp4"
data = file_path.split(".")
print(data[0])
print(data[1])
9.字符串拼接,得到一个新的字符串
data_list = ['烧杯','试管','福尔马林']
v1 = "_".join(data_list) # 用 _ 拼接列表中的数据
print(v1)
v2 = "778".join(data_list) # 用 778 拼接列表中的数据
print(v2)
v3 = "".join(data_list) # 用 空字符串拼接列表中的数据
print(v3)
# 输出
烧杯_试管_福尔马林
烧杯778试管778福尔马林
10.格式化字符串,得到新的字符串
name = "我叫{},来自{}"
print(name.format("李大牛", "湖南长沙"))
# 输出
我叫李大牛,来自湖南长沙
name = "我叫{name},来自{address},我喜欢{like}"
print(name.format(like="吃饭", name="李大牛", address="湖南")) # 关键字传参
# 输出
我叫李大牛,来自湖南,我喜欢吃饭
11.字符串转成字节类型
data = "嫂子" # unicode,字符串类型
v1 = data.encode("utf-8") # utf-8,字节类型
v2 = data.encode("gbk") # gbk,字节类型
print(v1) # b'\xe5\xab\x82 \xe5\xad\x90'
print(v2) # b'\xc9\xa9 \xd7\xd3'
s1 = v1.decode("utf-8") # 嫂子
s2 = v2.decode("gbk") # 嫂子
print(s1)
print(s2)
12.字符串内容居中、居左、居右
v1 = "王老汉"
# data = v1.center(21, "-")
# print(data) #---------王老汉---------
# data = v1.ljust(21, "-")
# print(data) # 王老汉------------------
# data = v1.rjust(21, "-")
# print(data) # ------------------王老汉
13.字符串补充0
data = "alex"
v1 = data.zfill(10)
print(v1) # 000000alex
# 应用场景:处理二进制数据
data = "101" # "00000101"
v1 = data.zfill(8)
print(v1) # "00000101"
练习题
1.写代码实现判断用户输入的值否以 "al"开头,如果是则输出 “是的” 否则 输出 “不是的”
# encoding: utf-8
# Author : limusen
# Datetime : 2022/3/28 11:56 上午
# File : 字符串练习题.py
# explain : 文件说明
user_input = input("请输入字符串:")
if user_input.startswith("al"):
print("是的")
else:
print("不是的")
2.写代码实现判断用户输入的值否以"Nb"结尾,如果是则输出 “是的” 否则 输出 “不是的”
# encoding: utf-8
# Author : limusen
# Datetime : 2022/3/28 11:56 上午
# File : 字符串练习题.py
# explain : 文件说明
user_input = input("请输入字符串:")
if user_input.endswith("Nb"):
print("是的")
else:
print("不是的")
3.将 name 变量对应的值中的 所有的"l"替换为 “p”,并输出结果
# encoding: utf-8
# Author : limusen
# Datetime : 2022/3/28 12:04 下午
# File : 替换变量名.py
# explain : 文件说明
name = "lasdlqwelaslasdlqwrlzxcl"
data = name.replace('l','p')
print(data)
4.写代码实现对用户输入的值判断,是否为整数,如果是则转换为整型并输出,否则直接输出"请输入数字"
# encoding: utf-8
# Author : limusen
# Datetime : 2022/3/28 12:06 下午
# File : 判断是否为整数.py
# explain : 文件说明
user_input = input("请输入数字:")
if user_input.isdecimal():
print(user_input)
else:
print("请输入数字")
5.对用户输入的数据使用"+"切割,判断输入的值是否都是数字?
提示:用户输入的格式必须是以下+连接的格式,如 5+9 、alex+999
# encoding: utf-8
# Author : limusen
# Datetime : 2022/3/28 12:09 下午
# File : 分割字符+.py
# explain : 文件说明
user_input = input("请输入以下格式数据(5+9或者ex+110):")
data = user_input.split('+')
if data[0].isdecimal() and data[1].isdecimal():
print("都是数字")
else:
print("不是纯数字")
6.写代码实现一个整数加法计算器(两个数相加)
需求:提示用户输入:5+9或5+9或5+9,计算出两个值的和(提示:先分割再转换为整型,再相加)
# encoding: utf-8
# Author : limusen
# Datetime : 2022/3/28 12:36 下午
# File : 计算器.py
# explain : 文件说明
user_input = input("请输入以下格式数据(5+9或者9+9):")
data = user_input.split('+')
if data[0].isdecimal() and data[1].isdecimal():
result = int(data[0]) + int(data[1])
print(result)
else:
print("不是纯数字")
7.写代码实现一个整数加法计算器(两个数相加)
需求:提示用户输入:5 +9或5+ 9或5 + 9,计算出两个值的和(提示:先分割再去除空白、再转换为整型,再相加)
# encoding: utf-8
# Author : limusen
# Datetime : 2022/3/28 1:13 下午
# File : 计算器分割再相加.py
# explain : 文件说明
user_input = input("请输入以下格式数据(5+9或者9+9):")
data = user_input.split('+')
if data[0].strip().isdecimal() and data[1].strip().isdecimal(): # 先分割
result = int(data[0].strip()) + int(data[1].strip())
print(result)
else:
print("不是纯数字")
8.补充代码实现用户认证。
需求:提示用户输入手机号、验证码,全都验证通过之后才算登录成功(验证码大小写不敏感)
import random
code = random.randrange(1000,9999) # 生成动态验证码
msg = "欢迎登录PythonAV系统,您的验证码为:{},手机号为:{}".format(code,"15131266666")
print(msg)
# 请补充代码
# encoding: utf-8
# Author : limusen
# Datetime : 2022/3/28 1:31 下午
# File : 手机验证码.py
# explain : 文件说明
import random
code = random.randrange(1000, 9999) # 生成动态验证码
code = str(code) # 转换成字符串
msg = "欢迎登录PythonAV系统,您的验证码为:{},手机号为:{}".format(code, "15131266666")
print(msg)
# 请补充代码
user_phone = input("请输入手机号:")
user_code = input("请输入验证码:")
if user_phone == "15131266666" and user_code.upper() == code.upper():
print("登录成功")
else:
print("登录失败")
补充代码实现数据拼接
data_list = []
while True:
hobby = input("请输入你的爱好(Q/q退出):")
if hobby.upper() == 'Q':
break
# 把输入的值添加到 data_list 中,如:data_list = ["小姨子","哥们的女朋友"]
data_list.append(hobby)
# 将所有的爱好通过符号 "、"拼接起来并输出
补充代码:
# encoding: utf-8
# Author : limusen
# Datetime : 2022/3/28 10:53 下午
# File : 拼接.py
# explain : 文件说明
data_list = []
while True:
hobby = input("请输入你的爱好(Q/q退出):")
if hobby.upper() == 'Q':
break
# 把输入的值添加到 data_list 中,如:data_list = ["小姨子","哥们的女朋友"]
data_list.append(hobby)
# 将所有的爱好通过符号 "、"拼接起来并输出
result = '、'.join(data_list)
print(result)
3.3 公共方法
-
相加:字符串 + 字符串
v1 = "alex" + "大sb" print(v1)
-
相乘:字符串 * 整数
data = "嫂子" * 3 print(data) # 嫂子嫂子嫂子
-
长度
data = "嫂子满身大汉" value = len(data) print(value) # 6
-
获取字符串中的字符,索引
message = "来做点py交易呀" # 0 1 2345 6 7 # ... -3 -2 -1 print(message[0]) # "来" print(message[1]) # "做" print(message[2]) # "点" print(message[-1]) # 呀 print(message[-2]) # 呀 print(message[-3]) # 呀
注意:字符串中是能通过索引取值,无法修改值。【字符串在内部存储时不允许对内部元素修改,想修改只能重新创建。】
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
-
获取字符串中的子序列,切片
message = "来做点py交易呀" print(message[0:2]) # "来做" print(message[3:7]) # "py交易" print( message[3:] ) # "py交易呀" print( message[:5] ) # "来做点py" print(message[4:-1]) # "y交易" print(message[4:-2]) # "y交" print( message[4:len(message)] ) # "y交易呀"
注意:字符串中的切片只能读取数据,无法修改数据。【字符串在内部存储时不允许对内部元素修改,想要修改只能重新创建】
message = "来做点py交易呀" value = message[:3] + "Python" + message[5:] print(value)
-
步长,跳着去字符串的内容
name = "生活不是电影,生活比电影苦" print( name[ 0:5:2 ] ) # 输出:生不电 【前两个值表示区间范围,最有一个值表示步长】 print( name[ :8:2 ] ) # 输出:生不电, 【区间范围的前面不写则表示起始范围为0开始】、 # 此处老师讲解时,错把 name[ 2::3 ]看成了name[ 2::2 ],更正下。(感谢 B站 放酱啊噗啊噗 同学的反馈) # print( name[ 2::2 ] ) # 输出:不电,活电苦 # print( name[ 2::3 ] ) # 输出:不影活影 print( name[ 2::3 ] ) # 输出:不电,活电苦 【区间范围的后面不写则表示结束范围为最后】 print( name[ ::2 ] ) # 输出:生不电,活电苦 【区间范围不写表示整个字符串】 print( name[ 8:1:-1 ] ) # 输出:活生,影电是不 【倒序】
name = "生活不是电影,生活比电影苦" print(name[8:1:-1]) # 输出:活生,影电是不 【倒序】 print(name[-1:1:-1]) # 输出:苦影电比活生,影电是不 【倒序】 # 面试题:给你一个字符串,请将这个字符串翻转。 value = name[-1::-1] print(value) # 苦影电比活生,影电是不活生
-
循环
-
while循环
message = "来做点py交易呀" index = 0 while index < len(message): value = message[index] print(value) index += 1
-
for循环
message = "来做点py交易呀" for char in message: print(char)
-
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] range(1,10,2) # [1,3,5,7,9] range(10,1,-1) # [10,9,8,7,6,5,4,3,2]
-
For + range
for i in range(10): print(i)
message = "来做点py交易呀" for i in range(5): # [0,1,2,3,4] print(message[i])
message = "来做点py交易呀" for i in range( len(message) ): # [0,1,2,3,4,5,6,7] print(message[i])
一般应用场景:
-
while,一般在做无限制(未知)循环此处时使用。
while True: ...
# 用户输入一个值,如果不是整数则一直输入,直到是整数了才结束。 num = 0 while True: data = input("请输入内容:") if data.isdecimal(): num = int(data) break else: print("输入错误,请重新输入!")
-
for循环,一般应用在已知的循环数量的场景。
message = "来做点py交易呀" for char in message: print(char)
for i in range(30): print(message[i])
-
break和continue关键字
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) # 输出: 来 做 点
for i in range(5): print(i)# 0 1 2 3 4 for j in range(3): break print(j) # 0 1 2 # 0 1 2 # 0 1 2 # 0 1 2 # 0 1 2
-
3.4 转换
num = 999
data = str(num)
print(data) # "999"
data_list = ["alex","eric",999]
data = str(data_list)
print(data) # '["alex","eric",999]'
一般情况下,只有整型转字符串才有意义。
3.5 其他
3.5.1 字符串不可被修改
name = "李木森" # 在python中字符串为不可变类型,对字符串操作实际上都是新生成一个数据
name[1]
name[1:2]
总结
-
整型在Python2和Python3中的区别?
-
进制之间的转换。
-
其他类型转换为布尔类型时,空和0为False,其他均为True。
-
条件语句中可自动化转换布尔类型来做判断。
if "武沛齐": print(666) else: print(999)
-
字符串中常见的独有功能。
-
字符串中常见的公共功能。
-
字符串创建之后是不可以被修改的。