字符串
作用:传递信息
表达式:使用单引号''
、''''''
双引号""
、""""""
引起来的一串符号叫字符串
性质:
- 字符串是有序的(下标、切片)
- 字符串是不可变(无增删改)
- 字符串的容器符号
''
,""
,''''''
,""""""
; - 字符串类型:
str
- 字符串分类:普通字符、转义字符、原始字符串
ASCII表
-
转义字符
有特殊含义的符号。原来转义字符规定使用
\ + 数字
表示有特殊意义的符号,现在C语言规定\ + 特定符号
表示有特殊意义的符号\ + 指定符号
可以使有特殊含义的符号变成其本身,可以让没有特殊含义的符号变的有特殊意义常见转移字符
print('ab\tc\nd') print('ab\'cd') print('ab\\tcd')
-
原始字符串
在字符串前面添加
r
或者R
,能够将字符串中的转义字符变成其本身,让字符串中所有的转义字符功能消失print('12\t34') print(r'12\t34') print(len(r'\t'), len('\t'))
一个转义字符长度始终为1,添加了原始字符串的转义字符长度是2
字符串的运算
-
字符串的拼接(得到的是新的字符串的对象)
print('ab' + 'cd')
-
字符串的重复
print('*' * 20)
-
字符串比较大小
比较第一对不相同元素的大小(对比的是编码值)
Python使用的编码表
ASCII
码表的拓展表Unicode编码表
(万国码)print('ab' > 'c') print('ab。' > 'abc')
chr()
- 能够将进制转换成对应的符号ord()
- 能够将符号转换为十进制0-9
对应的范围:48-57A-Z
对应的范围:65-90a-z
对应的范围:97-122- 所有的中文对应的范围:
\ue400
-\u9fa5
(十六进制)
print(ord('。')) print(chr(12290)) print(chr(ord('\u4e00')), chr(ord('\u9fa5'))) print(ord('\u4e00'), ord('\u9fa5')) # 中文对应的十进制范围 # 输出所有的中文 for i in range(19968, 40870): print(chr(i), end='')
进制转换:
二进制:
0
、1
A
: 二进制:0b01000001
,十进制:65
,十六进制:0x41
,八进制:0o101
print(chr(0b01000001), chr(65), chr(0x41), chr(0x41)) print(hex(65)) # 0x41 print(oct(65)) # 0o101
hex()
- 将进制转换为十六进制oct()
- 将进制转换为八进制
-
字符串的成员运算:
in
、not in
print('a' in 'abcd') # True
下标和切片
str1 = """
从前有座山,
山上有座庙,
庙里有个老和尚,
老和尚对小和尚说
"""
# 获取第一个“山”,下标为5,换行有个\n
print(str1[5])
# “说”的下标
print(str1[-2])
# 注意:一个回车键代表一个\n,长度为1。
切片
# 1. 将“从前有座山”取出。
# 2. 将“庙有老”取出
# 3. 将“庙座有上山”输出
print(str1[1:6])
print(str1[15:20:2])
print(str1[12:7:-1])
一行完整的内容如何换行?靠\
num = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 \
+1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8
print(num)
str2 = '23546576532' \
'4545'
print(str2)
遍历
循环(遍历)
str1 = '王者荣耀'
# 直接遍历
for i in str1:
print(i)
# 间接遍历
for i in range(len(str1)):
print(str1[i])
# 获取“王“、”荣”
for i in range(0, len(str1), 2):
print(str1[i])
print(str1[::2])
练习:“abcderf” -> “ABCDERF”
str2 = 'abcderf'
str3 = ''
for i in str2:
str3 += chr(ord(i) - 32)
print(str3)
练习:‘abcdABCD一二三四’ -> ‘ABCDabcd一二三四’
str4 = 'abcdABCD一二三四'
str5 = ''
for i in str4:
if 'a' <= i <= 'z':
# 97 <= ord(i) <= 122:
str5 += chr(ord(i) - 32)
elif 'A' <= i <= 'Z':
str5 += chr(ord(i) + 32)
else:
str5 += i
print(str5)
字符串的方法和函数
-
upper()
- 小写字母转大写字母print('abcANC3245,。;'.upper()) # ABCANC3245,。;
-
lower()
- 大写字母转小写字母print('Abcqwed456;.b'.lower()) # abcqwed456;.b
-
capitalize()
- 将字符串中首字母转大写,必须是以字母开头的字符串print('abcqweD456;.b'.capitalize()) # Abcqwed456;.b
-
title()
- 将字符串中所有连续英文字母的子串首字母转大写print('abc123D456;.b'.title()) # Abc123D456;.B
-
split()
- 切割,以指定符号为切割点,将切割点左右的字符串分开并保存到==列表==中result1 =', 1, 2, 3,'.split(',') # ['', ' 1', ' 2', ' 3', ''] print(result1) print('3' + '' == '3') # True
-
jion()
- 将一个所有元素均为字符串的序列(容器)中的所有元素以指定符号拼接起来result2 = ','.join(result1) print(result2) # , 1, 2, 3, # <class 'str'>
-
strip()
- 默认去掉字符串头尾的空符号(空格、\n、\等都是空符号),也可以指定去除的符号str1 = '\nabc\t\n' print('*'*20) print(str1) print('*'*20) print(str1.strip('\n')) print('*' * 20) print('abc*'.strip('*'))
-
replace('old_str', 'new_old')
- 替换,将一个字符串中全部old_str
替换成new_str
replace('old_str', 'new_old', '次数')
- 将一个字符串中指定数量的old_str
替换为new_str
str1 = ', 1, 2, 3,' print(str1.replace(',', '')) print(str1.replace(',', '', 2))
屏蔽敏感词汇应用
例如:
“你可真是个垃圾”
Python中有一个模块jieba(结巴)对主语、谓语、宾语等进行分词
[‘你’, ‘可’, ‘真是’,‘个’, ‘垃圾’]
# 现存一个词库(停用词):
# ['垃圾', '菜鸡', '辣鸡']
# 如果jieba分词之后的结果在停用词库中出现过,直接进行替换。
str1 = "你可真是个垃圾"
list1 = ['你', '可', '真是','个', '垃圾']
stop_words = ['垃圾', '菜鸡', '辣鸡']
str2 = ''
for i in list1:
if i in stop_words:
str2 += str1.replace(i, '*'*len(i))
print('屏蔽不文明用语之后的结果:', str2) # 屏蔽不文明用语之后的结果: 你可真是个**