本节带大家来学习Python常见的数据类型,Python中提供了int/bool/str/list/tuple/dict常见的数据类型共我们来使用,而每种数据类型都有自己的特点及应用场景,以后的开发中需要根据实际的开发情况选择合适的数据类型。

J6cEdK.png

1. 整型(int)

整型其实就是十进制整数的统称,比如:1、68、999都属于整型。他一般用于表示 年龄、序号等。

1.1 定义整型

1
2
3
4
5
number = 10
age = 99

# 可以通过type查看下到底是什么类型
print( type(number) )

1.2 常见方法

1.3 转换为整型

在项目开发和面试题中经常会出现一些 “字符串” 和 布尔值 转换为 整型的情况。

1
2
3
4
5
6
# 布尔值转整型
n1 = int(True) # True转换为整数 1
n2 = int(False) # False转换为整数 0

# 字符串转整型
v1 = int("186") # 结果:v1 = 186

练习题:请将以下三个字符串转换为十进制的整数,然后获取他们的和。

1
2
3
v1 = "66666"
v2 = "123"
v3 = "456"

2. 布尔值(bool)

布尔值,其实就是 “真”、“假” 两个值的统称。

2.1 布尔值的表示

1
2
DevOps = True
szk = False

2.2 常见方法

2.3 转换为布尔值

在以后的项目开发中,会经常使用其他类型转换为布尔值的情景,此处只要记住一个规律即可。

1
2
整数0、空字符串、空列表、空元祖、空字典转换为布尔值时均为False
其他均为True

2.4 其他

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

1
2
3
4
5
6
7
8
9
10
if 666:
print("太六了")

if "51devops":
print("你好")

if 0:
print("你是傻逼?")
else:
print("你是逗比?")

练习题:判断用户输入是否为空?如果为空则提示输入错误。

1
2
3
value = input("请输入值:")
if not value:
print("用户输入不能为空")

3. 字符串(str)

字符串,我们平时会用他来表示文本信息。例如:姓名、地址、自我介绍等。

3.1 字符串的表示

1
2
3
4
5
6
7
8
9
v1 = "包治百病"
v2 = '包治百病'
v3 = "包'治百病"
v4 = '包"治百病'
v5 = """
吵架都是我的错,
因为大家打不过。
"""
# 三个引号,可以支持多行/换行表示一个字符串,其他的都只能在一行中表示一个字符串。

3.2 常见方法

Python中给属于字符串的所有的值都提供了一些功能(方法),从而可以快速对字符串进行一些方便的操作。

注意:这是字符串类型独有的功能,其他类型中没有此功能。

  1. 判断字符串是否以 XX 开头?得到一个布尔值

    1
    2
    3
    v1 = "叨逼叨的一天,烦死了"
    result = v1.startswith("叨逼")
    print(result) # 值为True
    1
    2
    3
    4
    5
    6
    # 案例
    v1 = input("请输入住址:")
    if v1.startswith("北京市"):
    print("北京人口")
    else:
    print("非北京人口")
  2. 判断字符串是否以 XX 结尾?得到一个布尔值

    1
    2
    3
    v1 = "叨逼叨的一天,烦死了"
    result = v1.endswith("烦死")
    print(result) # 值为False
    1
    2
    3
    4
    5
    6
    # 案例
    address = input("请输入地址:")
    if address.endswith('村'):
    print("农业户口")
    else:
    print("非农户口")
  3. 判断字符串是否为十进制数?得到一个布尔值

    1
    2
    3
    v1 = "1238871"
    result = v1.isdecimal()
    print(result) # True
    1
    2
    3
    4
    5
    6
    7
    8
    # 案例
    v1 = input("请输入值:")
    v2 = input("请输入值:")
    if v1.isdecimal() and v2.isdecimal():
    data = int(v1) + int(v2)
    print(data)
    else:
    print("请正确输入数字")
  4. 去除字符串两边的 空格、换行符、制表符,得到一个新字符串

    1
    2
    3
    msg = " H e ll o啊,树哥 "
    data = msg.strip()
    print(data) # 将msg两边的空白去掉,得到"H e ll o啊,树哥"
    1
    2
    3
    4
    5
    6
    7
    # 案例
    code = input("请输入4位验证码:")
    data = code.strip()
    if data == "FB87":
    print('验证码正确')
    else:
    print("验证码错误")
  5. 字符串变大写,得到一个新字符串

    1
    2
    3
    msg = "my name is oliver queen"
    data = msg.upper()
    print(data) # 输出为:MY NAME IS OLIVER QUEEN
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 案例
    code = input("请输入4位验证码:")
    data = code.strip()
    value = data.upper()
    # value = code.strip().upper()
    if value == "FB87":
    print('验证码正确')
    else:
    print("验证码错误")
  6. 字符串变小写,得到一个新字符串

    1
    2
    3
    msg = "My Name Is Oliver Queen"
    data = msg.upper()
    print(data) # 输出为:my name is oliver queen
    1
    2
    3
    4
    5
    6
    7
    # 案例
    code = input("请输入4位验证码:")
    value = code.strip().lower()
    if value == "fb87":
    print('验证码正确')
    else:
    print("验证码错误")
  7. 字符串内容替换,得到一个新的字符串

    1
    2
    3
    data = "你是个好人,但是好人不合适我"
    value = data.replace("好人","贱人")
    print(value) # "你是个贱人,但是贱人不合适我"
    1
    2
    3
    4
    5
    # 案例
    video_file_name = "高清无码爱情动作片.mp4"
    new_file_name = video_file_name.replace("mp4","avi")
    final_file_name = new_file_name.replace("无码","步兵")
    print(final_file_name)
    1
    2
    3
    4
    5
    # 案例
    content = input("请输入评论信息")
    content = content.replace("草","**")
    content = content.replace("泥马","***")
    print(content)
  8. 字符串切割,得到一个列表

    1
    2
    3
    data = "51devops|root|51devops@qq.com"
    result = data.split('|')
    print(result) # 输出 ["51devops","root","51devops@qq.com"] 根据特定字符切开之后保存在列表中,方便以后的操作
    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 案例:判断用户名密码是否正确
    info = "51devops|root" # 备注:字符串中存储了用户名和密码
    user_list = info.split('|') # 得到一个包含了2个元素的列表 [ "51devops" , "root" ]
    user = input("请输入用户名:")
    pwd = input("请输入密码:")
    if user == user_list[0] and pwd == user_list[1]:
    print("登录成功")
    else:
    print("用户名或密码错误")
  9. 字符串拼接,得到一个新的字符串

    1
    2
    3
    data_list = ["中国","特朗普","小日本"]
    result = "干掉".join(data_list)
    print(result) # 输出:中国干掉特朗普干掉小日本(通过`干掉`把列表中的值拼接起来)
  10. 格式化字符串,得到新的字符串

    1
    2
    3
    name = "{0}的喜欢干很多行业,例如有:{1}、{2} 等"
    data = name.format("老王","护士","嫩模")
    print(data) # 老王的喜欢干很多行业,例如有:护士、嫩模 等
    1
    2
    3
    name = "{}的喜欢干很多行业,例如有:{}、{} 等"
    data = name.format("老王","护士","嫩模")
    print(data) # 老王的喜欢干很多行业,例如有:护士、嫩模 等
    1
    2
    3
    name = "{name}的喜欢干很多行业,例如有:{h1}、{h2} 等"
    data = name.format(name="老王",h1="护士",h2="嫩模")
    print(data) # 老王的喜欢干很多行业,例如有:护士、嫩模 等

练习题

1
2
3
4
5
6
7
8
1. 写代码实现判断用户输入的值否以 "al"开头,如果是则输出 "是的" 否则 输出 "不是的"
2. 写代码实现判断用户输入的值否以"Nb"结尾,如果是则输出 "是的" 否则 输出 "不是的"
3. 将 name 变量对应的值中的 所有的"l"替换为 "p",并输出结果
4. 写代码实现对用户输入的值判断,是否为十进制小数(isdecimal),如果是则转换为整型并输入,否则直接输出"请输入数字"
5. 对用户输入的数据使用"+"切割,判断输入的值是否都是数字?
提示:用户输入的格式必须是以+连接,如 5+9 、devops+999
6. 写代码实现一个整数加法计算器(两个数相加)
需求:提示用户输入:5+9或5+9或5+9,计算出两个值的和(提示:先分割再转换为整型,再相加)

3.3 转换为字符串

以后的python开发中经常的用是:数字 转 为字符串类型。

1
2
3
number = 888
data = str(number)
print(data)

3.4 其他

字符串除了有上述那些字符串独有的功能以外,还有一个其他“公共的功能”,某些其他的类型也具有的功能。

  1. 获取字符串长度

    1
    2
    3
    name = "szk"
    name_length = len(name)
    print(name_length) # 输出:3
    1
    2
    3
    nickname = "51devops"
    length = len(nickname)
    print(length) # 输出:8
  2. 索引,获取字符串中某个字符的值。
    JDawu9.jpg

1
2
3
4
name = "meet"
print( name[0] ) # 输出 m
print( name[1] ) # 输出 e
print( name[6] ) # (默认索引是从0向后逐步向后增加,索引超出最大范围会报错)
图上这个是从左到右的一种排序,其实还有一种从右像左的排序,看下图:

JDaajJ.jpg
这个查看和上边的一样,只不过是索引排序的方式不一样,他这次的排列序号是从右向左并且还是以-1开始,这里的-1其实就是表示我们的倒数第一个, -2表示倒数第二个,这样排列,如果我们的字符串比较长的时候想要获取最后一个就完全可以使用-1,看以下示例:

1
2
print( name[-1] ) #(如果索引为负值,则表示从后向前,-1表示最后一个)
print( name[-3] )

1
2
3
4
5
6
7
# 案例:循环字符串的所有字符
content = "长江以北晓峰最美山海关以外晓峰最帅"
index = 0
while index < len(content):
char = content[index]
print(char)
index += 1

练习题:获取用户输入的字符判断他的数字的字符串中有一个数字(只考虑个位数)?例如 你有点2,还特么有点666这段字符串中有4个数字。

  1. 切片,获取字符串中n连续的字符的值。我们先来看一个示例:
1
2
3
4
5
name = 'meet'
# 索引 0123
print(name[0:3])
结果:
mee

[第一个位置是开始:第二个位置是终止]中间必须使用分号,这样的写法就是从索引0开始获取到索引3结束

这个结果是不是和大家想的有点出入啊,大家肯定认为获取到的内容是meet,但是为什么是mee呢,因为终止的索引是不包含的获取的是这个区间的内容,简称‘左包右不包’ / ‘左闭右开’

通过如下案例,我们再来感受一下切片的用法:

1
2
3
4
5
6
7
8
name = "你是风儿我是沙。不,我不是沙而是你爸"
print( name[0:2] ) # 输出:你是 (根据索引 `前`按开区间 `后`按闭区间,即:前取后不取)
print( name[2:5] ) # 输出:风儿我
print( name[2:]) # 输出:风儿我是沙。不,我不是沙而是你爸(后面不写表示到最后)
print( name[:6]) # 输出:你是风儿我是(前面不是表示从头开始)
print( name[2:-1]) # 输出:风儿我是沙。不,我不是沙而是你
print( name[2:-2]) # 输出:风儿我是沙。不,我不是沙而是
print( name[0:len(name)]) # 输出:你是风儿我是沙。不,我不是沙而是你爸

4.步长,相当于我们生活中的跳步选择数据。我们先看一个示例:

1
2
3
4
5
name = 'meet'
# 索引 0123
print(name[0:3:1])
结果:
mee

JDaN3F.jpg

发现我在中括号中最后一个位置写了一个东西,也没什么变化,是的没有变化,因为我们不写的时候他默认就是1,我们换个数字在来看看

1
2
3
4
5
name = 'meet'
# 索引 0123
print(name[0:3:2])
结果:
me

这又是啥情况呢?想想我开始告诉大家的中括号里第一个参数是起始位置,第二参数是终止位置,第三个参数现在告诉大家是步长(每次走几步)

JDaUc4.jpg

当步长设置为2的时候,咱们只需要用起始位置0加上步长2,结果也就2然后在把索引为2的找到,2在加上步长2就是4,当要查找索引4是发现终止索引就是3,

所有不会进行查找.最终的结果就是me.

通过如下例子感受一下:

1
2
3
4
5
6
7
name = "生活不是电影,生活比电影苦"
print( name[ 0:5:2 ] ) # 输出:生不电 【前两个值表示区间范围,最有一个值表示步长】
print( name[ :8:2 ] ) # 输出:生不电,活 【区间范围的前面不写则表示起始范围为0开始】
print( name[ 2::3 ] ) # 输出:不影活影 【区间范围的后面不写则表示结束范围为最后】
print( name[ ::2 ] ) # 输出:生不电,活电苦 【区间范围不写表示整个字符串】
print( name[ 8:1:-1 ] ) # 输出:活生,影电是不 【倒序】
print( name[ ::-1 ] ) # 输出:苦影电比活生,影电是不活生 【倒序】

5.for循环

想要循环显示字符串的每个字符,通过之前的 while循环 + 索引 可以实现,现在通过for循环则可以更方便的实现。

1
2
3
content = "三分天注定,七分靠滤镜"
for item in content:
print(item)
1
2
3
4
5
6
7
# 案例:判断用输入的值中有多少个字符 `a`(不区分大小写,即:A、a)
total_count = 0
content = input("请输入内容:")
for char in content:
if char.upper() == 'A':
total_count += 1
message = "您输入的内容中A/a共有{}个".format(total_count)
1
2
3
4
5
6
# 案例:break和continue也可以应用在for循环中
data = "像我这样优秀的人,本该灿烂过一生"
for item in data:
print(item)
if item == "人":
break

作业题

  1. 有变量name = “szk zeNb “ 完成如下操作:

    • 移除 name 变量对应的值两边的空格,并输出处理结果
    • 判断 name 变量是否以 “sz” 开头,并输出结果(用切片)
    • 判断name变量是否以”Nb”结尾,并输出结果(用切片)
    • 将 name 变量对应的值中的 所有的”z” 替换为 “p”,并输出结果
    • 将name变量对应的值中的第一个”z”替换成”p”,并输出结果
    • 将 name 变量对应的值根据 所有的”z” 分割,并输出结果
    • 将name变量对应的值根据第一个”z”分割,并输出结果
    • 将 name 变量对应的值变大写,并输出结果
    • 将 name 变量对应的值变小写,并输出结果
    • 请输出 name 变量对应的值的第 2 个字符?
    • 请输出 name 变量对应的值的前 3 个字符?
    • 请输出 name 变量对应的值的后 2 个字符?
  2. 有字符串s = “123a4b5c”

    • 通过对s切片形成新的字符串 “123”
    • 通过对s切片形成新的字符串 “a4b”
    • 通过对s切片形成字符串s5,s5 = “c”
    • 通过对s切片形成字符串s6,s6 = “ba2”
  3. 使用while和for循环字符串 s=”asdfer” 中每个元素。

  4. 使用while和for循环分别对字符串 message = “伤情最是晚凉天,憔悴厮人不堪言。” 进行打印。

  5. 获取用户输入的内容,并计算前四位”l”出现几次,并输出结果。

  6. 获取用户两次输入的内容,并将所有的数据获取并进行相加,如:

    """
    要求:
        将num1中的的所有数字找到并拼接起来:1232312
        将num1中的的所有数字找到并拼接起来:1218323
        然后将两个数字进行相加。
    """
    num1 = input("请输入:") # asdfd123sf2312
    num2 = input("请输入:") # a12dfd183sf23