day04-字符串

1 字符编码

python中的编码采用的是Unicode编码。
什么是编码?
就是数字和字符的一一对应的,其中字符对应数字就是字符的编码。
编码方式
ASCII码表:针对数字字符、字母字符、一些英文中常用的符号进行编码
大写字母编码小于小写字母编码;大写字母编码和小写字母编码之间不是连续的
采用一个字节对字符进行编码(128个字符)
Unicode码:Unicode码包含了ASCII码表,同时能够对世界上所有语言对应的符号进行编码
采用两个字节对字符进行编码,能编码65536个字符。
两个函数
chr(编码值)-将字符编码转换成字符
中文编码范围:4E00-9FA5(十六进制)
ord(字符)-获取字符对应的编码值。
可以将字符编码放到字符串中表示一个字符:\u+4位的16进制编码值。

print('abc\u4f59123')

2获取字符串中的字符

一旦一个字符串确定,那么字符串中每个字符的位置就确定。
而且每个字符会对应一个用来表示其位置和顺序的下标值。

2.1 下标(索引)

字符串中的每个字符都有一个下标,代表其在字符串中的位置;
下标的范围是:0~字符串长度减一 (0代表第一个字符的位置);
-1~负的字符串长度(-1代表最后一个字符的位置)。

2.2 获取单个字符

语法:字符串[下标] -获取字符串中指定下标对应的字符;
说明:字符串 - 可以是字符串常量,也可以是字符串变量(只要结果是字符串就行)
[]-固定写法
下标-字符的下标,不能越界。

'abc'[1]
str1 = 'abc'
str1[1]

2.3 获取部分字符

2.3.1 法一

语法:字符串[开始下标:结束下标:步长]
开始下标、结束下标-写字符下标值
[ : : ]固定写法
步长-整数
功能:从开始下标获取到结束下标前为止,每次下标值增加步长。
注意
当步长是正数(从前往后取),开始下标对应的字符要在结束下标对应的字符前面
当步长是负数(从后往前取),开始下标对应的字符要在结束下标对应的字符后面
结束下标对应的值取不到的。

2.3.2 法二:

语法:字符串[开始下标:结束下标](相当于步长是1)
''空串
' '空格

str1 = 'qwerqerut'
print(str1[0:9:3], str1[-1:5:-1])

2.4获取部分字符 ,省略下标

获取部分字符的时候,开始下标和结束下标都可以省略

2.4.1开始下标省略

字符串[:结束下标:步长]或者字符串[:结束下标]
步长为正,从字符串开头往后获取;步长为负,从字符串结尾往前获取

2.4.2结束下标省略

字符串[开始下标::步长]或者字符串[开始下标:]
步长为正,从开始下标从前往后获取到字符串结束;步长为负,从开始下标从后往前获取到字符串开头

2.4.3开始下标,结束下标都省略

字符串[: :步长]或者字符串[:]
步长为正,从开头获取到字符串结尾;步长为负,从字符串结尾获取到开头
获取字符串中的多个字符,开始下标和结束下标都可以越界,但获取单个字符下标不能越界。

print(str1[-100:100])

3 字符串相关运算

3.1 加(+)

字符串1+字符串2:将两个字符串拼接在一起产生一个新的字符串
注意:字符串相加,加号两边必须都是字符串。

3.2 乘(*)

字符串*n(正整数):字符串的内容重复n次,产生一个新的字符串。

print(('#' * 5 + '$' * 7) * 5)

3.3 比较运算符:>,<,==,!=,>=,<=

3.3.1 ==,!=

字符串1 == 字符串2 -判断两个字符串是否相等.

3.3.2 >,<

字符串比较大小,是用编码值进行比较;用第一对不同的字符进行编码值大小比较。

char = "二"
print(chr(0x4E00) <= char <= chr(0x9FA5))
print('\u4E00' <= char <= '\u9FA5')
print(0x4E00 <= ord(char) <= 0x9FA5)

3.4.in和not in

字符串1 in 字符串2:判断字符串2中是否包含字符串1,结果是布尔值。
字符串1 not in 字符串2:判断字符串2中是否不包含字符串1,结果是布尔值。

3.5 len函数

len(序列)
len(字符串)-获取字符串中字符的个数。

3.6 str

str(数据):将数据转换成字符串

3.6.1:其他数据转换成字符串:

所有的类型的数据都可以转换成字符串.转换的时候就是在数据的值的最外面直接加引号。
补充:系统数据类型名不能用来给变量命名。

3.6.2字符串转其他类型

字符串转整数:int(字符串),只有去掉引号后剩下的部分本身就是一个整数的字符串才能转换成整型
字符串转浮点型:float(字符串),只有去掉引号后剩下的部分本身就是一个整数或者小数的字符串才
能转换成浮点型(去掉后为带e的科学计数法也可以转)
字符串转布尔:bool(字符串),只有空串''会转换成False,其他所有的字符串都会转换成True.

print(bool(''), bool(""), bool('False'))  # False False True。

4 格式字符串

4.1 格式字符串

指的是字符串中通过格式占位符来表示字符串中变化,然后后面再通过其他的值来给占位符赋值
语法:
含有格式占位符的字符串%(占位符对应的值)
格式占位符--有固定的写法;可以有多个。
% --固定写法
() - 里面的值的个数和值的类型和前面的格式占位符一一对应。

4.2 常见格式占位符

%d -- 整数
%s -- 字符串
%.nf -- 浮点数(保留小数点后n位小数)
%c -- 字符(可以将数字转换成字符)

name = input('名字:')
message = '%s,今年%d岁,体重:%.2fkg 血型是:%c'%(name,20,55,97)
print(message)

5 字符串常用方法

涉及到对字符串功能进行修改都是产生的一个新的字符串,原字符串没有发生改变。

5.1 字符串首字母大写

字符串.capitalize()-将字符串首字母转换成大写.

str1 = 'hello'
new_str = str1.capitalize()
print(new_str)   # Hello

5.2 字符串对齐

1.字符串.center(width,fillchar) - 居中
2.字符串.ljust(width,fillchar) - 左对齐
3.字符串.rjust(width,fillchar) - 右对齐
width - 正整数,表示新的字符串的宽度
fillchar - 字符,填充的字符,默认为空格
4.字符串.zfill(width) -右对齐,前面填0

str1 = '123'
new_str1 = str1.center(7, '*')   # **123**
new_str2 = str1.ljust(7, '*')    # 123****
new_str3 = str1.rjust(7, '*')    # ****123
new_str4 = str1.zfill(7)         # 0000123
print(new_str1, new_str2, new_str3, new_str4)

产生随机数

import random  # 导入随机数对应的模块
num = random.randint(0, 99)  # 产生一个0~99的随机整数
new_num='python1808'+str(num).rjust(3,'0')
print(new_num)

5.3 统计字符串2在字符串1中出现的次数

字符串1.count(字符串2)

str1 = 'asdeadfaadre'
str2 = 'a'
print(str1.count(str2))  # 4

5.4 检查是否以指定字符结尾和开头

1.检查是否以指定字符结尾
字符串1.endswith(字符串2,beg=0,end=len(字符串1)) beg代表开始检查的位置,end代表结束检查的位置
2.检查是否以指定字符开始
字符串1.startswith(字符串2,beg=0,end=len(字符串1))

str1 = 'asdeadfaadre'
str2 = 'f'
print(str1.endswith(str2, 2, 7),str1.endswith(str2))  # True False
print(str1.startswith(str2,0,len(str1)))  # False

5.5把tab换为空格

把字符串1 中的 tab 符号转为空格,tab 符号默认的空格数根据设置而定 。
字符串1.expandtabs(tabsize=8)

s='qwe\tqwr'
print(s,len(s.expandtabs(tabsize=2)))  #qwe qwr 7

5.6检查字符串2是否包含在字符串1中的指定范围内

1.字符串1.find(字符串2,beg=0,end=len(字符串1)) #从左边开始查找,如果包含返回开始的索引值(下标),否则返回-1
2.字符串1.index(字符串2,beg=0,end=len(string)) #跟find一样,不过如果没有,会报错
3.字符串1.rfind(字符串2,beg=0,end=len(字符串1))#跟find一样,不过是从右边开始查找
4.字符串1.rindex(字符串2,beg=0,end=len(string)) #跟index一样,不过是从右边开始查找

str1 = 'asdreadfaadre'
str2='ad'
print(str1.find(str2,0,len(str1))) #5
print(str1.rfind(str2,0,len(str1)))  # 9
print(str1.rindex('dr',0,len(str1))) # 10
print(str1.index('z',0,len(str1))) # ValueError: substring not found

5.7 判断字符串的组成成分

1.判断字符串是否由字母或数字组成
字符串1.isalnum()
2.判断字符串的字符是否由纯字母组成
字符串1.isalpha()
3.判断字符串是否由纯数字组成
字符串1.isdigit()

str1 = 'asdeadfaadre'
str2='1234'
str3='12ab'
str4='abc#123'
print(str1.isalnum(),str2.isalnum(),str3.isalnum(),str4.isalnum())  # True True True False
str1 = 'asADdre';str2='as123'
print(str1.isalpha(),str2.isalpha())   # True False
str1='123a123';str2='123'
print(str1.isdigit(),str2.isdigit())  #False  True

5.8 判断字符串中字母的大小写

1.判断字符串中出现的字母是否全由小写字母构成
字符串1.islower()
2.判断字符串中出现的字母是否全由大写字母构成
字符串1.isupper()

str1 = 'as壹23';str2='As123'
print(str1.islower(),str2.islower())   # True  False
str1='A12以';str2='A12cd'
print(str1.isupper(),str2.isupper())  # True False

5.9 判断字符串是否由纯数字构成(中文数字也可以)

字符串1.isnumeric()

str1='123abc';str2='123壹一1'
print(str1.isnumeric(),str2.isnumeric())  # False True

5.10 判断字符串是否由纯空白字符组成

字符串1.isspace()

str1 = '     ';str2=''
print(str1.isspace(),str2.isspace())  # True False

5.11 字符串标题化操作

1.判断字符串是否是标题化的
字符串1.istitle()
2.返回标题化的字符串(所有单词都以大写开始,其他为小写)
字符串1.title()

str1='Abc bcd ';str2='A12'
str3='AbD bcd';str4='ab12'
print(str1.istitle(),str2.istitle())  # False True
print(str3.title(),str4.title())      # Abd Bcd Ab12

5.12 将字符串2的每个字符分开并在之间插入指定的字符串1

字符串1.join(字符串2)

str1='123';str2='a#*&'
print(str1.join(str2))   # a123#123*123&

5.13 字符串中字母的大小写转换

1.转换字符串中所有大写字符为小写。
字符串1.lower()
2.将字符串中大写转换为小写,小写转换为大写。
字符串1.swapcase()
3.将字符串中的小写字母转换为大写。
字符串1.upper()

str1='ABCdef';str2='ABC12壹'
print(str1.lower(),str2.lower())   # abcdef abc12壹
print(str1.swapcase(),str2.swapcase()) # abcDEF abc12壹
print(str1.upper(),str2.upper())   # ABCDEF ABC12壹

5.14 截掉字符串的首位或者末位

截掉字符串首位的空格或指定字符
字符串1.lstrip()
删掉字符串末尾的空格或指定字符
字符串1.rstrip()
删掉字符串首位和末尾的空格或字符
字符串1.strip()

str1='cdabedsc';str2=' aafqweqa '
print(str1.lstrip('c'),str2.lstrip())  #dabedsc aafqweqa
print(str1.rstrip('c'),str2.rstrip())  #cdabeds  aafqweqa
print(str1.strip('c'),str2.strip())    #dabeds aafqweqa

5.15 寻找字符串中的最大最小编码字符

返回字符串中最大的字母(ascii码最大的编码)
max(字符串1)
返回字符串中最小的字母(ascii码最小的编码)
min(字符串1)

str1='ABaQbZ';str2='abcAB6c'
print(max(str1),min(str1),min(str2))    # a A 6

5.16 字符串替换

把字符串中的指定部分替换成另一部分,替换次数可设定
字符串1.replace(字符串2,字符串3,num)

str1='acdabwafada'
print(str1.replace('a', "1", 3))  #1cd1bw1fada

5.17 以指定字符串为分隔符截取字符串,截取个数可指定

字符串1.split(字符串2,num=字符串1.count(字符串2))

str1='abcdabwasabweab'
print(str1.split('ab',str1.count('ab')),str1.split('ab',2))  #['', 'cd', 'was', 'we', ''] ['', 'cd', 'wasabweab']

5.18 按照行(\n,\r,\n\r)分隔,产生一个新的字符串

按照行(\n,\r,\n\r)分隔,产生一个新的字符串;如果参数为True,保留换行符;为False,不包含换行符。
字符串1.splitlines(参数)

str1='\n123\rabc\r\nqwe'
print(str1.splitlines(True))   # ['\n', '123\r', 'abc\r\n', 'qwe']
print(str1.splitlines(False))  # ['', '123', 'abc', 'qwe']

5.19 检查字符串中是否只包含十进制的字符

检查字符串中是否只包含十进制的字符
字符串1.isdecimal()

str1='12ab12';str2='123987';str3='123Ⅰ23'
print(str1.isdecimal(),str2.isdecimal(),str3.isdecimal())  # False True False
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容