day02-数据类型(上)
常见的数据类型:int,bool,str,list,tuple,dict,set,float
1.整型
整型其实就是十进制整数的统称,比如:1、68、999都是整型。他一般用于表示年龄、序号等。
1.1 定义
number = 10
age = 99
1.2 独有功能
v1 = 5
# 调用v1(int)的独有功能,获取v1的二进制有多少个位组成。
result1 = v1.bit_length()
print(result1) # 3
v2 = 10
# 调用v2(int)的独有功能,获取v1的二进制有多少个位组成。
result2 = v2.bit_length()
print(result2) # 4
1.3 公共功能
加减乘除
v1 = 4
v2 = 8
v3 = v1 + v2
1.4 转换
在项目开发和面试题中经常会出现一些字符串和布尔值转换为整型的情况。
# 布尔值转整型
n1 = int(True) # 1
n2 = int(False) # 0
# 字符串转整型
v1 = int("186", base=10) # 186
v2 = int("0b1001", base=2) # 9
v3 = int("0o144", base=8) # 100
v4 = int("0x59", base=16) # 89
# 浮点型
f1 = int(8.7) # 8
1.5 其他
1.5.1 长整型
- python3:整型
- python2:整型、长整型
在python2中跟整数相关的数据类型有两种:int、long,它们都是整数只不过能表示的值范围不同。
1.5.2 地板除
python2中两个值相除时,默认进行地板除,只保留整数位。(python3中默认会保留小数)
2.布尔类型
布尔值,其实就是“真”,“假”。
2.1 定义
data = False
alex = True
2.2 独有功能
无
2.3 公共功能
无
2.4 转换
在以后的项目开发中,会经常使用其他类型转换为布尔值的情景,此处只要记住一个规律即可。
整数0,空字符串,空列表,空元组,空字典转换为布尔值时均为False,其余均为True
2.5 其他
2.5.1 做条件自动转换
如果在if
、while
条件后面写一个值当作条件时,他会默认转换为布尔类型,然后再做条件判断。
3.字符串类型
字符串,我们平时会用它来表示文本信息。例如:姓名、地址、自我介绍等。
3.1 定义
v1 = "包治百病"
v2 = '包治百病'
v3 = "包'治百病"
v4 = '包"治百病'
v5 = """包治百病"""
# 三个引号,可以支持多行/换行表示一个字符串,其他的都只能在一行中表示一个字符串.
3.2 独有功能(18/48)
"xxxxx".功能(...)
- 判断字符串是否xxx开头,得到一个布尔值
v1 = "叨逼叨的一天"
result = v1.startswith("叨逼叨")
print(result) # True
- 判断字符串是否以xx结尾,得到一个布尔值。
v1 = "叨逼叨的一天"
result = v1.endswith("叨逼叨")
print(result) # False
- 判断字符串是否为十进制数?得到一个布尔值
v1 = "123124"
result = v1.isdecimal()
print(result) # True
- 去除字符串两边的空格、换行符、制表符,得到一个新字符串
msg = " 我喜欢你 "
data = msg.strip() # 将msg两边的空白去掉
data = msg.lstrip() # 将msg左边的空白去掉
data = msg.rstrip() # 将msg右边的空白去掉
# 再补充,去除字符串两边指定的内容
msg = "哥 我喜欢你 哥"
data = msg.strip("哥")
data = msg.lstrip("哥")
data = msg.rstrip("哥")
- 字符串变大写,得到一个新字符串。
msg = "my name is oliver"
data = msg.upper()
- 字符串变小写,得到一个新字符串。
msg = "My Name Is Oliver"
data = msg.lower()
- 字符串内容替换,得到一个新的字符串
data = "你是个好人,但是好人不适合我"
value = data.replace("好人","贱人")
- 字符串切割,得到一个列表
data = "吴佩琦|root|231535"
result= data.split("|") # ['吴佩琦', 'root', '231535']
result= data.split("|", 1) # ['吴佩琦', 'root|231535'],指定切几个
result= data.split("|", 2) # ['吴佩琦', 'root', '231535']
result = data.rsplit("|") # ['吴佩琦', 'root', '231535']
result = data.rsplit("|", 1) # ['吴佩琦|root', '231535']
- 字符串拼接,得到一个新的字符串
data_list = ["alex","是","大烧饼"]
v1 = "*".join(data_list) # alex*是*大烧饼
v2 = "_".join(data_list) # alex_是_大烧饼
- 格式化字符串,得到新的字符串
name = "{0}的喜欢干很多行业,{1},{2}"
data = name.format("老王", "护士", "嫩模") # 老王的喜欢干很多行业,护士,嫩模
name = "{}的喜欢干很多行业,{},{}"
data = name.format("老王", "护士", "嫩模") # 老王的喜欢干很多行业,护士,嫩模
name = "{name}的喜欢干很多行业,{h1},{h2}"
data = name.format(name="老王", h1="护士", h2="嫩模") # 老王的喜欢干很多行业,护士,嫩模
- 字符串转换为字节类型
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) # 嫂子
- 将字符串内容居中、居左、居右展示
v1 = "王老汉"
data = v1.center(21, "*")
print(data) # *********王老汉*********
data = v1.ljust(21, "*")
print(data) # 王老汉******************
data = v1.rjust(21, "*")
print(data) # ******************王老汉
- 帮助你填充0
data = "alex"
v1 = data.zfill(10)
print(v1) # 000000alex
# 应用场景,处理二进制数据
3.3 公共功能
- 相加:字符串+字符串
v1 = "alex" + "safa"
- 相乘:字符串*整数
data = "嫂子" * 3
- 长度
data = "嫂子按时打发"
value = len(data)
- 获取字符串中的字符索引
message = "来做点交易呀"
print(message[0])
print(message[1])
print(message[2])
# 注意:字符串中是能通过索引取值,无法修改值。【字符串在内部存储时不允许对内部元素修改,想修改只能重新创建】
- 获取字符串中的子序列,切片
message = "来做点交易呀呀呀"
print(message[0:2]) # 来做
print(message[3:7]) # 交易呀呀
print(message[3:]) # 交易呀呀呀
print(message[:5]) # 来做点交易
# 注意:字符串中的切片只能读取数据,无法修改数据。【字符串在内部存储时不允许对内部元素修改,想修改只能重新创建】
- 步长,跳着取字符串的内容
name = "生活不是电影,生活比电影苦"
print(name[0:5:1]) # 生活不是电
print(name[:8:2]) # 生不电,
print(name[2::3]) # 不影活影
print(name[::2]) # 生不电,活电苦
print(name[8:1:-1]) # 活生,影电是不
- 循环
- 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)
- for + range
message = "来做点py交易呀"
for i in range(0, len(message)):
print(message[i])
一般应用场景:
- while,一般在做无限制(未知)循环时使用
- for循环,一般应用在已知循环数量的场景
- break和continue关键字
3.4 转换
num = 99
data = str(num)
print(data) # "999"
data_list = ["alex","eric"]
data = str(data_list)
print(data) # '["alex","eric"]'
一般情况下,只有整型转字符串才有意义。
3.5 其他
3.5.1 字符串不可被修改
作业
第一题
v1 = 675
r1 = bin(v1)
print(r1)
v2 = "0b11000101"
r2 = int(v2, base=2)
print(r2)
v3 = "11000101"
r3 = int(v3, base=2)
print(r3)
第二题
v1 = 123
v2 = 456
b1 = bin(v1)
b2 = bin(v2)
r = int(b1[2:]+b2[2:], base=2)
print(r)
第三题
v1 = 123
v2 = 456
b1 = bin(v1)
b2 = bin(v2)
r = int(b1[2:].zfill(16)+b2[2:].zfill(16), base=2)
print(r)
第四题
答案:整型0,空字符串,空列表,空字典,空元组
第五题
答案:
1.456
2.666
3.345
第六题
text = input("请输入文本")
r = text.replace("苍老师", "***").replace("波波老师", "***")
print(r)
第七题
name = "aleX leNb"
r1 = name.strip()
r2 = name.startswith("al")
r3 = name.endswith("Nb")
r4 = name.replace("l", "p")
r5 = name.split("l")
r6 = name.split("l", 1)
r7 = name.upper()
r8 = name.lower()
第八题
name = "aleX leNb"
print(name[::-1])
第九题
s = "123a4b5c"
r1 = s[0:3]
r2 = s[3:6]
r3 = s[-1]
r4 = s[-3:0:-2]
第十题
message = "伤情最是晚凉天,憔悴厮人不堪言"
index = 0
while index < len(message):
print(message[index])
index += 1
第十一题
message = "伤情最是晚凉天,憔悴厮人不堪言"
for char in message:
print(char)
第十二题
message = "伤情最是晚凉天,憔悴厮人不堪言"
for i in range(len(message) - 1, -1, -1):
print(message[i])
第十三题
for i in range(3, 0, -1):
print(f"倒计时{i}秒")
第十四题
text = input("请输入内容:")
r = 0
for char in text:
if char == "浪":
r += 1
print(r)
第十五题
num1 = input("请输入:")
num2 = input("请输入:")
t1 = ""
t2 = ""
for i in num1:
if i.isdecimal():
t1 += i
for i in num2:
if i.isdecimal():
t2 += i
print(int(t1) + int(t2))