python的官方文档有中文的:www.python.org->Docs->坐上角语言切换为中文
- 定义:字符串是以单引号或双引号括起来的任意文本
‘abd’ “def” #字符串不包括引号本身
创建字符串
str1 = "sunck is a good man!"
str2 = 'sunk is a good man!'
新字符串的组成方式
- 用加号
str1 = "lao"
str2 = "wang"
str3 = str1 + str2
- 用占位符
str = "laowang"
str2 = "===%s==="%str
#利用法二使字符串小数在输出时指定小数位数(因为python中的小数有误差)
str = "1.2345"
str2= "%.2f"%float(str)
字符串运算
str3 = "sunck is a"
str4 = "good man!"
str5 = str3 + str4
print(str5)
类似的还有后面的join方法
caution:字符串本身不可变,能变的只是变量,改变变量不是改变字符串
输出重复字符串
str6 = "good"
str7 = str6 * 10
print(str7)
字符串比较大小
挨个比较字符的ASCII码,ASCII码大的大
访问字符串中的某一个字符
通过索引下标查找字符,索引从0开始
如果索引为负,表示从右往左数,右边第一个为-1
- 格式:字符串名[下标]
str8 = "Tom is a good man!"
print(str8[2]) #输出d
str8[2] = "x" #报错,因为字符串不可变
切片
- def:访问字符串中的某一部分
- str[start: end: step]
step 默认为1,如果step为负值,则从右往左
负值意为从右往左数,最后字符为-1
- 将字符串逆序:str[::-1]
str9 = "sunck is a good man!" str10 = str9[6:15] #包首不包尾 print(str10) #空格也是一个字符,此处输出"is a good" str11 = str9[:15] #从头开始截取到结尾下标之前 str12 = str9[16:] #输出man! caution:如果下标越 界,往前到开始,往后到结束
成员运算符的运用
print("good" in str9) #输出true print("google" not in str9) #输出true
字符串相关方法
序:常用方法
- find
- replace
- split
- count
- join
- strip
类型一:字符串为参数
eval(str)
- 功能:将字符串str当成有效的表达式来求值并返回计算结果
num1 = eval("123")
print(num1) #输出123,num1为整型
print(evla("12+3")) #输出15,因为是当成表达式计算值
len(str)
- 功能:返回字符串的长度,注意,非字节数,而是字符的个数
类型二:字符串为调用者
str.lower()
- 功能:转换字符串中的所有大写字母转换为小写字母(重新生成字符串)
str.upper() - 功能:转换字符串中所有小写字母为大写字母
print("Hello world".upper())
str = "Hello world"
print(str.lower())
str.swapcase()
- 功能:将字符串中的大小写互相转换
print("hello WORLD".swapcase()) #输出“HELLO world"
str.capitalize()
- 功能:首字母大写,其他小写
print("hello woRld".capitalize()) #输出"Hello world"
str.title()
- 功能:每个单词的首字母大写,其他小写
print("hOlle world".title()) #输出"Hello World"
str.center(width, fillcahr)
print("hello world".center(40, "*")) #输出"**************hello world***************"
# 功能:将字符串居中,指定总宽度,两边用指定字符填充,如果参数符号为奇数个,则左边少一个
str.ljust(width[, fillchar])
- 功能:指定总宽度,左对齐,右边用指定字符填充
print("hello world".ljust(20, "*")) #输出"hello world*********"
str.rjust(width[, fillcahr])
- 功能:指定总宽度,右对齐,左边用指定字符填充
print("hello world".rjust(20, "*")) #输出"*********hello world"
str.zfill(width)
- 功能:用0左补齐
print("hello word".zfill(40)) #输出"000000000000000000000000000000hello word"
str.count(substr[, start][, end])
- 功能:返回字符串中参数字符串出现的次数,可以指定一个范围,默认从头到尾
print("I am a a a aa very nice man".count("a")) #输出7
str.find(substr[, start][, end])
- 功能:返回substr在指定范围内第一次出现的下标(非相对start),默认从头到尾,若没有则返回-1。ps:从左至右
print("I am Tom".find("To")) #输出5
print("I am Tom".find("To", 2)) #输出5
str.rfind(substr[, start][, end])
- 功能:在指定范围内从右至左找substr,返回下标
str.index(substr[, start = 0][, end = len(str)])
- 功能:功能与find相同,但是若查找的字符串不在母串中,则会报错(可结合in先行判断)。ps:从左至右
if "wo" in "hello word":
print("hello world".index("wo")) #输出6
str.rindex(substr[, start = 0][, end = len(str)])
- 功能:功能与find相同,但是若查找的字符串不在母串中,则会报错。ps:从右至左
print("hello world".rindex("wo")) #输出6
str.lstrip(char)
- 功能:去除字符串中左边指定的char,默认为空格
print("****hello wrold".lstrip('*')) #输出"hello wrold"
str.rstrip(char)
- 功能:去除字符串中右边指定的char,默认为空格
print("****hello wrold****".rstrip('*')) #输出"****hello wrold"
比较大小
直接用等号
printf("a" == "a") #输出TRUE
split(str=" ", num)
以str为分隔符截取字符串,默认为看不见的符号,eg:\t \n 空格;指定num,则仅截取num个字符串
num其实很少写
str38 = "sunck is a good man"
print(str38.split("*")
#求字符串中的单词数
str = input("please input ypur sentence:\n")
count = 0
for i in str:
if len(i) > 0:
count += 1
print(count)
splitlines(True/False)
按照(’\n’,’\r\n’,’\r’)分隔,返回以行字符串为元素的列表
参数默认为False,即不保留换行符,如果为True,保留换行符
str40 = """
sunck is a good man!
sunck is a nice man!
sunck is handsome man!
"""
print(str40.splitlines())
partition()
以参数字符串将原字符传分隔为3部分,并将其以元组形式返回,参数字符串在中间
str = "my name is Tom"
print(str.partition("is"))
join(seq)
以指定的分隔符,将seq中的所有元素组合成一个字符串
格式:分隔符串.join(list)
list41 = ["sunck","is","a","good","man"]
str42 = " ".join(list41) #以空格为分隔符,将list41组合为字符串,如果作为参数的可迭代对象是字典,在该类对可迭代对象的操作往往是基于key值
print(str42)
max()/min()
str43 = "sunck is a good man!"
print(max(str43))
print(min(str43))
replace(oldstr, newstr,count)
以newstr替换oldstr,默认替换全部,如果指定了count,则只替换count个
str44 = "sunck is a good man!"
str45 = str44.replace("good","nice")
print(str44)
print(str45)
- maketrans(“oldstr”,“newstr”)与translate(maketrans)
maketrans()
创建一个字符串映射表,要与tranlate结合使用*
将o替换为n,l替换为e,……,找到一个即替换一个,不必找到整个oldstr后再替换,实际上用得较少,因为不可控
translate
str47 = str.maketrans("un", "ac")
str46 = "sunck is a good man"
print(str46.translate(str47)) #输出sacck is a good mac
startwith(str, start = 0, end = len(str))
endwith(str, start = 0, end = len(str))
分别为在指定的范围内判断字符串是不是以参数字符串开始或结束,如果没有指定范围,默认整个字符串
str49 = "sunck is a good man"
print(str49.startwith("sucnk")
print(str49.entwith("man"))
encode(encoding=“utf-8”, errors="strict)
decode()
编码方式:utf-8、gbk。errors为处理错误的方式,有strict,ignore
注意:解码时的编码格式要与编码时的格式相同
str51 = "sunck is a good man"
data52 = str51.encode("utf-8") #data52的类型为bytes
print(data52)
str53 = data52.decode("utf-8")
print(str53)
isalpha()
如果字符串中至少有一个字符且所有的字符都是字母则返回True,否则返回False
str54 = "sunck is a good man"
print(str54.isalpha())
isalnum()
如果字符串中至少有一个字符且所有的字符都字母或数字则返回True,否则返回False
取自is al(pha) number
str55 = "la2b3"
print(str55.isalnum()) #输出True
isupper()
如果字符串中至少有一个字母且所有的字母都是大写的英文字母则返回True,否则返回False
至少一个英文字母,可以有其他的,比如数字,但是只有所有的字母都是大写时才返回True
print("ABD".isupper()) #输出True
islower()
与isupper()类似
isdigit()/isnumeric()
如果字符串只包含数字,则返回True,否则返回False
istitle()
如果字符串是标题化的,则返回True,注意,有个方法为title,即将字符串标题化
isdecimal()
如果字符串只包含10进制字符,则返回True,否则False
isspace()
如果字符串中只包含空格(可以一个或多个,包括\t,\n,\r),则返回True,否则返回False
即判断字符串是否为空白符
字符函数
ord()
- 将字符转为对应的ASCII码
print(ord('a')) #输出97
chr()
- 将数字转为对应的字符
print(chr(97)) #输出'a'
翻外篇
import string
import string
str = string.ascii.uppercase #得到A-Z的字符串
布尔(bool)值
一个布尔值只有True、False两种值
空值
python里面用None标记
- None不能当作数字0来理解,是一个特殊值
#单例设计模式
Class S:
instance = None
def __new__(self, *args, **kwargs):
if S.instance == None:
S.instance = super().__new__(cls)
return S.instance
A = S()
B = S()
print(id(A),id(B)) #会发现两个的地址相同