Python基础之字符串
文章目录
- 字符串定义
- 原始字符串
- 字符串索引
- 字符串基本操作符
- 字符串处理函数
- 字符串处理方法
字符串定义
字符串是字符序列的表示,可以由一对单引号(‘’)、双引号(“”)、三引号(’’’)构成。
原始字符串
思考:Windows的路径 G:publishcodes 33.3 在python中是否可以直接写?
借助原始字符串 以”r”开头,原始字符串不会把反斜线当成特殊字符串
print(r' G:publishcodes 33.3') #输出结果: G:publishcodes 33.3字符串索引
字符串包括2种序号体系,正向递增序号和反向递增序号。如果字符串的长度为L,正向递增需要以最左侧字符序号为0,向右依次递增,最右侧字符序号为L-1,反向递减序号以最右侧字符序号为-1,向左依次递减,最左侧字符序号为-L。
字符串切片
<字符串>[N:M:L] 从字符串中取出子字符串
从起始N位开始,到结束M位的前一位结束(不包含结束位本身) ,遵循[左闭右开)的原则
[:] 提取从开头(默认位置0)到结尾(默认位置-1)的整个字符串
[N:] 从N提取到结尾
[:M] 从开头提取到M - 1
[N:M] 从N提取到M - 1
[N:M:L] 从N提取到M- 1,每L 个字符提取一个
[N] 从字符中取单个字符
[::-1] 字符串的逆序
s="hello python" print(s[0]) #结果:h print(s[0],s[6],s[-1]) #结果:h p n print(s[1:-4]) #结果:ello py print(s[:7]) #结果:hello p print(s[1:]) #结果:ello python print(s[:]) #结果:hello python print(s[::-1]) #结果:nohtyp olleh字符串基本操作符
| 操作符 | 描述 |
|---|---|
| + | x+y :连接两个字符串x和y |
| * | x*n:复制n次字符串x |
| x in s | 如果x是子串,返回True,否则返回False |
| str[i] | 索引,返回第i个字符 |
| str[N:M] | 切片,返回索引第N到第M的子串,其中不包含M |
print("hello"+" python") #结果:hello python
print("hellot"*3) #结果:hello hello hello
print("h" in "python") #结果:True
例题:获取星期字符串
程序读入一个表示星期几的数字(1-7),输出对应的星期字符串名称。如输入3,返回“星期三”
week_str="星期一星期二星期三星期四星期五星期六星期日"
week_id=eval(input("请输入星期数字(1-7):"))
pos=(week_id-1)*3 #输入的星期数与week_str的序号的等差数列关系
print(week_str[pos:pos+3]) #获得从起始位置pos开始且长度为3的子串
--------------------------------------------------------------------
请输入星期数字(1-7):4
星期四
通过在字符串中截取适当的子串实现星期名称的查找。问题关键在于找出子串的截取位置,每个星期日期的缩写都是由3个字符串组成,如果知道星期日期字符串的起始位置,就能很容易获得缩写的子串。
字符串处理函数| 函数 | 描述 |
|---|---|
| len(x) | 返回字符串x的长度,也可返回其他组合数据类型元素个数 |
| str(x) | 返回任意类型x所对应的字符串形式 |
| chr(x) | 返回Unicode编码x对应的单字符 |
| ord(x) | 返回单字符表示的Unicode编码 |
| hen(x) | 返回整数x对应十六进制数的小写形式字符串 |
| oct(x) | 返回整数x对应八进制数的小写形式字符串 |
每个字符在计算机中可以表示为一个数字,称为编码。目前,计算机系统使用的各一个重要编码是ASCII编码,该编码用数字0-127表示计算机键盘上的常见字符以及一些被称为控制代码的特殊值,如大写字母A-Z用65-90表示,小写字母a-z用97-122表示。python 字符串中每个字符都是使用Unicode编码表示。
例题:凯撒密码
凯撒密码是古罗马凯撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面第三个字符。对应的关系如下。
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
原文字符 P,密文字符C,满足如下条件:
C=(P+3)mod 26
解密方法反之,满足如下关系:
P=(C-3)mod 26
'''假设用户可能使用的信息仅包括小写字母a-z,对应的凯撒加密程序'''
plaincode=input("请输入明文:")
for p in plaincode:
if ord("a")<= ord(p)<= ord("z"):
print(chr(ord("a")+(ord(p)-ord("a")+3)%26),end="")
else:
print(p,end="")
------------------------------------------------------------------
请输入明文:hello python
khoor sbwkrq
字符串处理方法
1、大小写相关处理方法
| 方法 | 描述 |
|---|---|
| lower() | 将整个字符串改为小写 |
| upper() | 将整个字符串改为大写 |
| title() | 将每个单词的首字母改为大写 |
s="hello lucy good morning!" print(s.title()) print(s.lower()) print(s.upper()) --------------------------------------------- Hello Lucy Good Morning! hello lucy good morning! HELLO LUCY GOOD MORNING!
2、查找和替换的相关处理方法
| 方法 | 描述 |
|---|---|
| find(str,start,end) | 检测str是否包含在字符串中,如果start和end指定范围,则检查是否包含在指定范围内,如果是返回第一次出现该字符串的索引值,否则返回-1 |
| index(str,start,end) | 检测str是否包含在字符串中,如果start和end指定范围,则检查是否包含在指定范围内,如果是返回第一次出现该字符串索引值,否则引发valueerror错误 |
| replace(old,new[,count]) | 所有old子串被替换成new,如果给出count,则前count次old出现被替换 。注意:不改变原有字符串 |
| startswith(str) | 判断字符串是否已指定子串开头,若是返回True,否则返回False |
| endswith(str) | 判断字符串是否已指定子串结束,若是返回True,否则返回False |
s="hello lucy good moring!"
print(s.startswith("hello")) # 结果:True
print(s.endswith("morning!")) # 结果:False
print(s.find("lucy")) # 结果:6 返回第一次出现该字符串的索引值
print(s.find("amy")) # 结果: -1,"amy"不在指定的范围,返回-1
print(s.index("lucy")) # 结果: 6
print(s.index("amy")) # 结果:报错ValueError,"amy"不在指定的范围,返回ValueError
print(s.replace("lucy","Amy")) # 结果:hello Amy good moring!
print(s.replace("l","a",2)) # 结果:heaao lucy good moring! 前2次ll被替换
print(s) # 结果:hello lucy good moring! "replace"不改变原有字符串
3、分割、连接的相关处理方法
| 方法 | 描述 |
|---|---|
| split(str,num) | 将字符串按指定分割符分割成多个短语(返回的是一个列表)。str为分隔符拆分字符串,如果num有指定值,则仅分割num+1个子字符串,str默认包含‘r’‘t’‘n’和空格 |
| seq.join(str) | 将多个短语连接成字符。str是变量,seq连接的字符串,在str变量中除最后元素外每个元素后面添加seq内容,构成一个新的字符串 |
s="python.org is good"
print(s.split(".")) #以"."作为分隔符,返回的是列表。['python', 'org is good']
print(s.split(" ")) #以空格" "作为分隔符,返回的是列表。['python.org', 'is', 'good']
print("/".join(s)) #以"/"作为连接符,在s变量中除最后元素外每个元素后面添加"/"。p/y/t/h/o/n/./o/r/g/ /i/s/ /g/o/o/d
s1=s.split() #以空格作为分隔符,返回的是列表。['python.org', 'is', 'good']赋值给s1
print("/".join(s1)) #以"/"作为连接符,在s1列表中除最后元素外每个元素后面添加"/"。python.org/is/good
3、其他相关处理方法
| 方法 | 描述 |
|---|---|
| center(width,fillchar) | 字符串根据宽度width居中,fillchar特定字符 |
| ljust(width,fillchar) | 返回一个原字符串左对齐 |
| rjust(width,fillchar) | 返回一个原字符串右对齐 |
| strip(char) | 截掉字符串左右两边的空白/特殊字符,(包括:’n’、’t’、’r’)char – 移除字符串头尾指定的字符序列 |
| lstrip(char) | 截掉字符串左边(开始)的空白/特殊字符 |
| rstrip(char) | 截掉字符串右边(末尾)的空白/特殊字符 |
| count(sub, start,end=len(string)) | 该方法返回子字符串在字符串中出现的次数。sub – 搜索的子字符串,start – 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。end – 字符串中结束搜索的位置。 |
str="hello python" print(str.center(50,"*")) print(str.rjust(50,"*")) print(str.ljust(50,"*")) ------------------------------------------------------ 输出的结果 *******************hello python******************* **************************************hello python hello python**************************************
s="hello world!n"
print(s.strip())
s1="¥hello world¥$&"
print(s1.rstrip("¥"))
print(s1.lstrip("¥"))
print(s1.strip("¥"))
----------------------------------------------------------
输出的结果:
hello world!
¥hello world¥$&
hello world¥$&
hello world¥$&
str1 = "mysqlsqlserverPostgresQL" str2 = "sql" count1 = str1.count(str2,10) print(count1) #结果:0 搜索位置从第10位开始 count2 = str1.count(str2) print(count2) #结果:2 搜索位置默认从第0位开始



