字符串(str)
字符串,我们平时会用他来表示文本信息。例如:姓名、地址、自我介绍等。
1 字符串的表示
v1 = "包治百病"
v2 = '包治百病'
v3 = "包'治百病"
v4 = '包"治百病'
v5 = """吵架都是我的错,因为大家打不过。"""
# 三个引号,可以支持多行/换行表示一个字符串,其他的都只能在一行中表示一个字符串。
2 常见方法
Python中给属于字符串的所有的值都提供了一些功能(方法),从而可以快速对字符串进行一些方便的操作。
注意:这是字符串类型独有的功能,其他类型中没有此功能。
-
判断字符串是否以 XX 开头?得到一个布尔值
v1 = "叨逼叨的一天,烦死了" result = v1.startswith("叨逼") print(result) # 值为True
# 案例 v1 = input("请输入住址:") if v1.startswith("北京市"): print("北京人口") else: print("非北京人口")
-
判断字符串是否以 XX 结尾?得到一个布尔值
v1 = "叨逼叨的一天,烦死了" result = v1.endswith("烦死") print(result) # 值为False
# 案例 address = input("请输入地址:") if address.endswith('村'): print("农业户口") else: print("非农户口")
-
判断字符串是否为十进制数?得到一个布尔值
v1 = "1238871" result = v1.isdecimal() print(result) # True
# 案例 v1 = input("请输入值:") v2 = input("请输入值:") if v1.isdecimal() and v2.isdecimal(): data = int(v1) + int(v2) print(data) else: print("请正确输入数字")
-
去除字符串两边的 空格、换行符、制表符,得到一个新字符串
msg = " H e ll o啊,树哥 " data = msg.strip() print(data) # 将msg两边的空白去掉,得到"H e ll o啊,树哥"
# 案例 code = input("请输入4位验证码:") data = code.strip() if data == "FB87": print('验证码正确') else: print("验证码错误")
-
字符串变大写,得到一个新字符串
msg = "my name is oliver queen" data = msg.upper() print(data) # 输出为:MY NAME IS OLIVER QUEEN
# 案例 code = input("请输入4位验证码:") data = code.strip() value = data.upper() # value = code.strip().upper() if value == "FB87": print('验证码正确') else: print("验证码错误")
-
字符串变小写,得到一个新字符串
msg = "My Name Is Oliver Queen" data = msg.upper() print(data) # 输出为:my name is oliver queen
# 案例 code = input("请输入4位验证码:") value = code.strip().lower() if value == "fb87": print('验证码正确') else: print("验证码错误")
-
字符串内容替换,得到一个新的字符串
data = "你是个好人,但是好人不合适我" value = data.replace("好人","贱人") 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)
# 案例 content = input("请输入评论信息") content = content.replace("草","**") content = content.replace("泥马","***") print(content)
-
字符串切割,得到一个列表
data = "xx|xxxx|xxxxx@qq.com" result = data.split('|') print(result) # 输出 ["xx","xxxx","xxxxx@qq.com"] 根据特定字符切开之后保存在列表中,方便以后的操作
# 案例:判断用户名密码是否正确 info = "武沛齐|root" # 备注:字符串中存储了用户名和密码 user_list = info.split('|') # 得到一个包含了2个元素的列表 [ "武沛齐" , "root" ] user = input("请输入用户名:") pwd = input("请输入密码:") i f user == user_list[0] and pwd == user_list[1]: print("登录成功") else: print("用户名或密码错误")
-
字符串拼接,得到一个新的字符串
data_list = ["你","我","哈哈"] result = "干掉".join(data_list) print(result) # 输出:你干掉我干掉哈哈(通过`干掉`把列表中的值拼接起来)
-
格式化字符串,得到新的字符串
name = "{0}的喜欢干很多行业,例如有:{1}、{2} 等" data = name.format("小明","学生","老师") print(data) # 小明的喜欢干很多行业,例如有:学生、老师 等
name = "{}的喜欢干很多行业,例如有:{}、{} 等" data = name.format("小明","学生","老师") print(data) # 小明的喜欢干很多行业,例如有:学生、老师 等
name = "{name}的喜欢干很多行业,例如有:{h1}、{h2} 等" data = name.format(name="小明",h1="学生",h2="老师") print(data) # 小明的喜欢干很多行业,例如有:学生、老师 等
练习题
1. 写代码实现判断用户输入的值否以 "al"开头,如果是则输出 "是的" 否则 输出 "不是的"
2. 写代码实现判断用户输入的值否以"Nb"结尾,如果是则输出 "是的" 否则 输出 "不是的"
3. 将 name 变量对应的值中的 所有的"l"替换为 "p",并输出结果
4. 写代码实现对用户输入的值判断,是否为十进制小数(isdecimal),如果是则转换为整型并输入,否则直接输出"请输入数字"
5. 对用户输入的数据使用"+"切割,判断输入的值是否都是数字?
提示:用户输入的格式必须是以+连接,如 5+9 、alex+999
6. 写代码实现一个整数加法计算器(两个数相加)
需求:提示用户输入:5+9或5+9或5+9,计算出两个值的和(提示:先分割再转换为整型,再相加)
7. 写代码实现一个整数加法计算器(两个数相加)
需求:提示用户输入:5 +9或5+ 9或5 + 9,计算出两个值的和(提示:先分割再去除空白、再转换为整型,再相加)
8. 补充代码实现用户认证。
需求:提示用户输入手机号、验证码,全都验证通过之后才算登录成功(验证码大小写不敏感)
import random
code = random.randrange(1000,9999) # 生成动态验证码
msg = "欢迎登录PythonAV系统,您的验证码为:{},手机号为:{}".format(code,"15131266666")
print(msg)
# 请补充代码
9. 补充代码实现数据拼接
data_list = []
while True:
hobby = input("请输入你的爱好(Q/q退出):")
if hobby.upper() == 'Q':
break
data_list.append(hobby) # 把输入的值添加到 data_list 中,如:data_list = ["小姨子","哥们的女朋友"]
# 将所有的爱好通过符号 "、"拼接起来并输出
3 转换为字符串
以后的python开发中经常的用是:数字 转 为字符串类型。
number = 888
data = str(number)
print(data)
4 其他
字符串除了有上述那些字符串独有的功能以外,还有一个其他“公共的功能”,某些其他的类型也具有的功能。
-
获取字符串长度
name = "武沛齐" name_length = len(name) print(name_length) # 输出:3
nickname = "wupeiqi" length = len(nickname) print(length) # 输出:7
-
索引,获取字符串中某个字符的值。
name = "来做点py交易" print( name[0] ) # 输出 来 print( name[1] ) # 输出 做 print( name[6] ) # 输出 易 (默认索引是从0向后逐步向后增加,索引超出最大范围会报错) print( name[-1] ) # 输出 易 (如果索引为负值,则表示从后向前,-1表示最后一个) print( name[-3] ) # 输出 y print( name[len(name)-1]) # 输出 易
# 案例:循环字符串的所有字符 content = "长江以北晓峰最美山海关以外晓峰最帅" index = 0 while index < len(content): char = content[index] print(char) index += 1
# 案例:循环字符串的所有字符 content = "你瞅啥" index = -1 while index >= - len(content): char = content[index] print(char) index -= 1
练习题:获取用户输入的字符判断他的数字的字符串中有一个数字(只考虑个位数)?例如
你有点2,还特么有点666
这段字符串中有4个数字。 -
切片,获取字符串中n连续的字符的值。
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)]) # 输出:你是风儿我是沙。不,我不是沙而是你爸
-
步长,相当于我们生活中的跳步选择数据。
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 ] ) # 输出:苦影电比活生,影电是不活生 【倒序】
-
for循环
想要循环显示字符串的每个字符,通过之前的 while循环 + 索引 可以实现,现在通过for循环则可以更方便的实现。
content = "三分天注定,七分靠滤镜" for item in content: print(item)
# 案例:判断用输入的值中有多少个字符 `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)
# 案例:break和continue也可以应用在for循环中 data = "像我这样优秀的人,本该灿烂过一生" for item in data: print(item) if item == "人": break content = input("请输入内容:") for char in content: if char.upper() == 'A': total_count += 1 message = "您输入的内容中A/a共有{}个".format(total_count)
# 案例:break和continue也可以应用在for循环中 data = "像我这样优秀的人,本该灿烂过一生" for item in data: print(item) if item == "人": break