字符串

一、字符串【重点掌握】

由若干个字符组成的一个序列被称为字符串,其中的字符可以是字母,数字,符号,中文等

注意:字符串属于不可变的数据类型,可以作为字典的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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值