一、字符串【重点掌握】
由若干个字符组成的一个序列被称为字符串,其中的字符可以是字母,数字,符号,中文等
注意:字符串属于不可变的数据类型,可以作为字典的key
1.创建
2.操作
3.系统功能
3.1转换
eval():将str转换为有效的表达式
upper():将小写字母转换为大写
lower():大—》小
swapcase():大—》小 小----》大
capitalize():首单词的首字母大写,其他全部小写,英文句子
title():每个单词的首字母大写,其他全部小写
ord(),chr()
3.2查找
find():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到返回-1 ******
rfind():从右往左进行检索
index():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到则直接报错 ****
rindex():从右往左进行检索
3.3填充
center(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居中显示 ****
ljust(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居左显示,
rjust(width[,fillchar]):用fillchar填充指定的字符串,填充之后的长度为width,原字符串居右显示,
zfill(width):原字符串居右显示,剩余的字符默认用0填充
3.4提取
strip():去除一个指定字符串中两端指定的子字符 ****
lstrip():去除一个指定字符串中左边指定的子字符
rstrip():去除一个指定字符串中右边指定的子字符
3.5合并和分割
join():使用指定的子字符串将列表中的元素连接【列表-----》字符串】 ****
split():使用指定的子字符串将原字符串进行分割,得到一个列表 【字符串-----》列表】****
3.6替换
replace(old,new):将原字符串中的old替换为new ****
映射替换:
maketrans():生成映射表
translate():根据映射表将指定字符串中的指定字符替换为映射表中对应的字符
3.7判断
isalpha():一个字符串非空并字符全部是字母才返回True
isalnum():一个字符串非空并字符是字母或者数字才返回True
isupper()/islower()/istitle():和upper,lower,title有关
isdigit()/isdecimal():一个字符串非空并字符全部是数字才返回True ***
startswith();判断一个字符串是否是以指定自字符串开头【前缀】 ***
endswith():判断一个字符串是否是以指定自字符串结尾【后缀】 ****
3.8编码和解码
encode():编码
decode();解码
3.9格式化
占位符
format()
f""
3.10练习一
# 1.写代码,有如下变量,请按照要求实现每个功能 # a.移除name变量对应值的两边的空格,并输出移除后的内容 """ strip():去除一个指定字符串中两端指定的子字符 **** lstrip():去除一个指定字符串中左边指定的子字符 rstrip():去除一个指定字符串中右边指定的子字符 """ name = " gouguoQ " print(name) # 注意1:默认去除一个指定字符串两端的空格 a1 = name.strip() print(name) print(a1) a1 = name.lstrip() print(a1) a1 = name.rstrip() print(a1) # 注意2:可以自定义需要去除的字符 name = "*****gouguoQ**********" print(name) a1 = name.strip("*") print(a1) a1 = name.lstrip("*") print(a1) a1 = name.rstrip("*") print(a1) # b.判断name变量对应的值是否以"go"开头,并输出结果 # c.判断name变量对应的值是否以"Q"结尾,并输出结果 """ startswith();判断一个字符串是否是以指定自字符串开头【前缀】 *** endswith():判断一个字符串是否是以指定自字符串结尾【后缀】 **** """ name = "gouguoQ " print(name.startswith("go")) print(name.endswith("Q")) # d.将name变量对应的值中的"o",替换为"p",并输出结果 """ replace(old,new,count):将原字符串中的old替换为new **** 映射替换: maketrans():生成映射表 translate():根据映射表将指定字符串中的指定字符替换为映射表中对应的字符 """ # 注意 1:省略了 count,则默认表示全部替换 name = "gouguoQoooo " d1 = name.replace("o",'p') print(d1) # 注意 2:可以通过 count 指定需要替换的次数 d1 = name.replace("o",'p',3) print(d1) # 注意 3;可以通过建立映射表进行替换,建立映射表的时候,两个字符串的长度必须相等 str1 = "45164675862" table = str.maketrans("123456",'abcdef') print(table) # {49: 97, 50: 98, 51: 99, 52: 100, 53: 101, 54: 102} d2 = str1.translate(table) print(d2) # deafdf7e8fb # ValueError: the first two maketrans arguments must have equal length # 练习 name = "gouguoQoooo " t = str.maketrans("o",'p') d3 = name.translate(t) print(d3) # e.将name变量对应的值根据"o"分割,并输出结果 """ join():使用指定的子字符串将列表中的元素连接【列表-----》字符串】 **** split():使用指定的子字符串将原字符串进行分割,得到一个列表 【字符串-----》列表】**** """ # 注意 1:如果不指定分割次数,默认全部分割 name = "gouguoQoabco1234 " e1 = name.split("o") print(e1) # ['g', 'ugu', 'Q', 'abc', '1234 '] # 注意 2:可以指定分割次数 e1 = name.split("o",2) print(e1) # ['g', 'ugu', 'Qoabco1234 '] # n.利用下划线将列表li = ['gou', 'guo', 'qi']的每一个元素拼接成字符串gou_guo_qi li = ['gou', 'guo', 'qi'] e2 = "_".join(li) print(e2) # gou_guo_qi # g.将name变量对应的值变大写,并输出结果 # h.将name变量对应的值变成小写,并输出结果 """ upper():将小写字母转换为大写 lower():大---》小 swapcase():大---》小 小----》大 capitalize():首单词的首字母大写,其他全部小写,英文句子 title():每个单词的首字母大写,其他全部小写 """ name = "this is A Test" print(name.upper()) print(name.lower()) print(name.swapcase()) print(name.capitalize()) print(name.title()) # i.请输出name变量对应的值的第二个字符 print(name[1]) # j.请输出name变量对应的值的前三个字符 print(name[:3]) # k.请输出name变量对应值的后2个字符 print(name[-2:]) print(name[len(name) - 2:]) # l.请输出name变量中的值"Q的索引的位置 """ find():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到返回-1 ****** rfind():从右往左进行检索 index():从左往右进行检索,返回被查找的子字符串在原字符串中第一次出现的位置,如果查找不到则直接报错 **** rindex():从右往左进行检索 """ # 注意 1:如果指定字符存在,find 和 index 的功能相同,都是从左往右进行查找,获取指定字符在原字符串中第一次出现的索引 name = "gouQguoQ " print(name.index("Q")) # 3 print(name.find("Q")) # 3 # 注意 2:如果指定字符不存在,index 会报错,find 返回-1 # print(name.index("a")) # ValueError: substring not found print(name.find("a")) # -1 # 注意 3:rfind 和 rindex 都是从右往左进行查找,指定字符在原字符串中第一次出现的索引,索引仍然表示在原字符串中的索引 print(name.rindex("Q")) # 7 print(name.rfind("Q")) # 7 # 注意 4:默认全局查找,也可以自定义查找区间,该区间是包头不包尾 # index(substr,start,end) # print(name.index("Q",4,7)) print(name.find("Q",4,7)) # m.获取子序列,仅不包含最后一个字符,如:woaini则获取woain root则获取roo name = "woaini" print(name[:-1]) name = "root" print(name[:-1]) # 【面试题】 # a. # name = "gouguoQoooo " # name.replace("o",'p') # print(name) # gouguoQoooo # b. # name = "gouguoQoooo " # name = name.replace("o",'p') # print(name) # gpugupQpppp # c # name = "this is A Test" # name.upper() # print(name) # 结论:字符串是不可变的,所以但凡涉及到字符串的修改操作,都是生成了一个新字符串
3.11练习二
# 2.已知字符串 a = "aAsmr3idd4bgs7Dlsf9eAF",要求如下 a = "aAsmr3idd4bgs7Dlsf9eAF" # a.请将a字符串的大写改为小写,小写改为大写 a1 = a.swapcase() print(a1) # b.请将a字符串的数字取出,并输出成一个新的字符串 """ isdigit()/isdecimal():一个字符串非空并字符全部是数字才返回True *** """ b = "" for ch in a: if ch.isdigit(): b += ch print(b) # c.请统计a字符串出现的每个字母的出现次数(忽略大小写,a与A是同一个字母),并输出成一个字典。 例 {'a':4,'b':2} c = a.lower() count_dict = {} for ch in c: if ch not in count_dict: count_dict[ch] = c.count(ch) print(count_dict) # d.输出a字符串出现频率最高的字母 count_dict = {} for ch in a: if ch not in count_dict: count_dict[ch] = a.count(ch) print(count_dict) max_count = max(count_dict.values()) for ch,count in count_dict.items(): if count == max_count: print(ch) # e.请判断 'boy'里出现的每一个字母,是否都出现在a字符串里。如果出现,则输出True,否则,则输出False # 方式一 a = "ab45gagy" sub_str = "boy" count = 0 for ch in sub_str: if ch in a: count += 1 if count == len(sub_str): print(True) else: print(False) # 方式二 a = "a45goagy" sub_str = "boy" s1 = set(a) print(s1) s1.update(sub_str) # {'b','o','y'} print(s1) if len(s1) == len(set(a)): print(True) else: print(False) # 方式三 a = "ab45goagy" sub_str = "boy" s1 = set(a) print(set(sub_str) - s1) if set(sub_str) - s1: print(False) else: print(True) # 方式四 a = "a45goagy" sub_str = "boy" s1 = set(a) & set(sub_str) if len(s1) == 3: print(True) else: print(False)
3.12练习三
# 3.统计用户输入的内容中有几个数字,几个字母? """ isalpha():一个字符串非空并字符全部是字母才返回True isalnum():一个字符串非空并字符是字母或者数字才返回True isdigit()/isdecimal():一个字符串非空并字符全部是数字才返回True ** """ # a. # data = input("请输入内容:") # letters_count = 0 # digits_count = 0 # for ch in data: # if ch.isdigit(): # digits_count += 1 # if ch.isalpha(): # letters_count += 1 # print(f"数字:{digits_count},字母:{letters_count}") """ isalpha()和isalnum():工作原理是依据的是 ASCII 码表,但是,在使用的过程中,可以识别除了 ASCII 码外的中文 在实际项目开发中,不建议使用 """ # b.优化 # 方式一 # data = input("请输入内容:") # letters_count = 0 # digits_count = 0 # for ch in data: # if ch.isdigit(): # digits_count += 1 # if 'a' <= ch <= 'z' or 'A' <= ch <= "Z": # letters_count += 1 # print(f"数字:{digits_count},字母:{letters_count}") # 方式二 import string # print(string.ascii_letters) # print(string.ascii_lowercase) # print(string.ascii_uppercase) # print(string.digits) # data = input("请输入内容:") # letters_count = 0 # digits_count = 0 # for ch in data: # if ch in string.ascii_letters: # letters_count += 1 # if ch in string.digits: # digits_count += 1 # print(f"数字:{digits_count},字母:{letters_count}") # 4.编写敏感词语过滤程序,提示用户输入内容,如果用户输入的内容中包含特殊的字符,如山寨 水货,则将内容替换为***** data = input("请输入内容:") words = ["山寨","水货","卧槽",'大傻逼','草'] for word in words: if data.find(word) != -1: # word in data data = data.replace(word,"*" * len(word)) print(data)