Day3 字符串和字符串相关运算

一、获取字符

1、获取单个字符

字符串中的每一个字符都会对应一个唯一的下标(索引)用来表示字符在字符串中的位置。

下标的范围:

  • 下标是从0开始依次增加的,0对应的第一个字符 (0 ~ 字符串长度 - 1)
  • 下标是从-1开始依次减少的,-1对应的最后一个字符;( - 1 ~ 字符串长度)
str = 'hello' 

# h对应下标0,e对应下标1,l对应下标2,l对应下标3,o对应下标4

# h对应下标-5,e对应下标-4,l对应下标-3,l对应下标-2,o对应下标-1

a、语法:

字符串[下标]  # 获取字符串中指定下标对应的字符

b、说明:

字符串 - 只要结果是字符串的表达式都可以,例如:字符串字面量,字符串变量

[] - 固定写法

下标 - 需要获取的字符对应的下标;注意,这儿的下标不能越界
例1:

result = 'How are you!'[0] # 或取字符串How are you!下标为0的元素'H',并赋给变量result。

例2:

result = 'How are you!'
print(result[2])

例3:

result = 'How are you!'[-99]
print(result)
# 下标越界报错
# IndexError: string index out of range
2、获取部分字符(字符串切片)

方法一:
a、语法:

字符串[开始下标:结束下标:步长]  # 从开始下标开始,到结束下标前为止(不含结束下标)。每次下标值加上步长去获取下一个

b、说明:

字符串 - 只要结果是字符串的表达式都可以,例如:字符串字面量,字符串变量

[] - 固定写法

开始下标、结束下标 - 下标值(这里可以越界)

步长 - 必须要求是整数(正数和负数都行),

如果步长为正数,是从开始下标开始从前往后获取;

如果步长为负数,是从开始下标开始从后往前获取。

c、注意:

当步长为正,要求开始下标对应的字符位置必须在结束下标对应的字符的位置的面,否则结果是空串!

当步长为负,要求开始下标对应的字符位置必须在结束下标对应的字符的位置的面,否则结果是空串!

不管怎么取,结束下标一定取不到。

例一:

str1 = 'Hello Python'
print(str1[0:4:1])  # Hell
print(str1[0:4:2])  # Hl
print(str1[0:4:-2]) # 输出空串

print(str1[0:-1:2]) # HloPto
print(str1[-1:0:-2]) # nhy le
print(str1[-1:-100:-1]) # 结束下标越界,倒序输出结果:nohtyP olleH

方法二:(省略步长)

语法:

字符串[开始下标:结束下标]  # 从开始下标开始,到结束下标前为止(不含结束下标),省略步长,默认为1。
print('Good morning!'[2:5]) # od 

方法三:(省略开始下标和结束下标)

a、省略开始下标

字符串[:结束下标:步长]  
# 省略开始下标,当步长为正数时,从字符串的第一个字符(包含)开始取到结束下标前为止
# 省略开始下标,当步长为负数时,从字符串的最后一个字符开(包含)始取到结束下标前为止
str1 = '0123456789'
print(str1[:6]) # 012345
print(str1[:6:-1]) # 987

b、省略结束下标

字符串[开始下标::步长]  
# 省略结束下标,当步长为正数时,从开始下标开始取到字符串最后一个字符(包含)为止
# 省略结束下标,当步长负正数时,从开始下标开始取到字符串第一个字符(包含)为止
str1 = '0123456789'
print(str1[2::]) # 23456789
print(str1[2::-1]) # 210

运用:让字符倒序输出

str1 = '0123456789'
print(str1[::]) # 0123456789
print(str1[::-1]) # 9876543210

二、字符串相关运算

1、支持的运算符

支持数学运算符+,*

支持比较运算符> ,<, ==, >= ,<= ,!=

Python中的字符串支持数学运算中的+和*,以及所有的比较运算符。

a、+

语法:字符串1 + 字符串2

说明:将字符串1和字符串2拼接在一起产生一个新的字符串。

注意:字符串不能和数字混合相加。

newstr = 'abc' + '123'
print(newstr)   # abc123

b、*

语法:字符串*N

说明:N是正整数,实现N个字符串相加。

newstr = 'abc' * 3
print(newstr)   # abcabcabc

c、比较是否相等

==, != 可以判断两个字符串是否相等或者不相等

print('abc' == 'abc')   #True
print('abc' != 'abc')   #False

d、比较大小

规则:从第一个字符开始依次往后找,到到第一个不相等的字符对,判断他们的编码值得大小,谁的编码值大,对应的字符串就大,不会往后比较了。

print('b' > 'a')    #True
print('bc' > 'abc')  #True

判断是否是小写字母:'a' <= char <= 'z'

判断是否是大写字母:'A' <= char <= 'Z'

判断是否是字母:'a' <= char <= 'z' or 'A' <= char <= 'Z'

判断是否是中文:'\u4e00' <= char <= '\u9fa5'

判断一个字符串中的第3个字符是否是字母

str1 = 'ququ3quququ'
char = str1[2]
print('是否是字母:',  'a' <= str1 <= 'z'  or  'A' <= str1 <= 'Z')
2、in和not in操作

语法:

字符串1 in 字符串2
字符串1 not in 字符串2

说明:in判断字符串1是否在字符串2里面

​ not in判断字符串1是否不在字符串2里面

print('abc' in 'hello abc')     # True
print('abc' in 'hello cba')     # False
print('abc' not in 'hello cba') # True
3、len函数

语法:

len(序列)

说明;获取序列长度,获取序列中元素的个数。

len(字符串)

说明:获取字符串的长度。

运用:

获取用户输入的最后一个字符

str1 = input('请输入:')
last_char = str1[len(str1)-1]
print(last_char)

注意:

  • 一个可以转义的字符的长度为1
  • 一个编码字符的长度是1
  • 一个空格字符的长度是1
  • 手动在键盘上按一个tab,一般空格是4个空格,长度是4;一个\t来表示的tab,长度是1

三、格式字符串

1、什么是格式字符串

在字符串中通过格式占位符来代替字符串中变换的部分,然后通过数据或者变量确定变化

语法:

包含占位符的字符串 % (值1, 值2, 值3...)

说明:

占位符 说明
%s 字符串占位符
%d 整数占位符
%f 小数占位符
%c 字符占位符(可以将数字转化成对应字符)
%.Nf 保留小数点后N位小数

% - 固定写法

() - 固定写法,字符串中只有一个占位符的时候这个括号可以省略

括号里面的值 - 值要和占位符位置和类型一一对应。

name = input('请输入名字:')
sex = input('请输入性别:')
message = '我叫%s,性别:%s 年龄%d岁'%(name, sex, 18)

输入一个字符串,用一个变量保存输入的字符串的相关信息:XXX的长度是XX,最后一个字符是X

例如:输入abc -> abc的长度是3,最后一个字符是c

str1 = input("请输入字符串:")
length = len(str1)
last_char = str1[-1]
message = '%s的长度是%d,最后一个字符是%c' % (str1, length, last_char)
print(message)
'''
请输入字符串:abcdef
abcdef的长度是6,最后一个字符是f
'''

四、类型转换

语法:

类型名(数据) - 将指定数据转换成指定类型,类型名是任何Python支持的,或者自定的类型都可以

数据 - 需要转换的对象(类型名不同要求不一样)。

举个例子:

age = input('年龄:')
print(type(age), age)
print('是否成年:', age >= 18)

说明:输入的age是字符串,字符串无法和整数比较,程序报错,需要类型转换。

类型转换 说明
int(数据) 将数据转换成整型
float(数据) 将数据转换成浮点型
bool(数据) 将数据转换成bool
str(数据) 将数据转换成字符串
1、int类型转换

支持小数,布尔值,部分字符串。

print(int(12.99))   # 12
print(int(True))    # 0
print(int('12'))    # 12
print(int('-12'))   # -12
print(int('12.4'))  # ValueError
print(int('abc'))   # ValueError
print(int('3e2'))   # ValueError

注意:int()不是所有字符串都能转换成整数,只有去掉字符串的引号后本身就是一个整数的字符串才能转换成整数。

2、float()类型转换
print(float(10))    # 10.0
print(float(True))  # 1.0
print(float('-32')) # -32
print(float('3.14'))# 3.14
print(float('3e2')) #300.0

注意:float()不是所有字符串都能转换成整数,只有去掉字符串的引号后本身就是一个小数的字符串才能转换成整数。

3、bool()类型转换

都可以转换。所有为空位零的值都转换成False,其他都是True。

print(bool(2))      # True
print(bool(-3))     # True
print(bool(0))      # False
print(bool(3+1j))   # True
print(bool(3.14))   # True
print(bool(-0.14))  # True
print(bool(0.0))    # False
print(bool('False'))# True
print(bool(' '))    # True
print(bool(''))     # False
print(bool(None))   # False
4、str()类型转换

Python中所有的数据都可以转换成字符串而且转换的时候就是单纯地在外面加引号。

五、字符串内建函数

字符串相关方法的使用方式都是:字符串.方法名()

1、字符串.capitalize()

将指定的字符串的第一个字符转换成大写字母,返回新的字符串
注意:只有第一个字符是字母的时候才有效。

str1 = 'abc'
print(str1.capitalize())    # Abc
2、字符串对齐
  • 字符串.center(width, fillchar) - 居中,width决定新字符串长度,fillchar就是用来填充多出来的位置的字符
  • 字符串.ljust(width, fillchar) - 左对齐
  • 字符串.rjust(width, fillchar) - 右对齐
str1 = 'abc'
print(str1.center(10, '*')) # ***abc****
print(str1.ljust(10, '*'))  # abc*******
print(str1.rjust(10, '*'))  # *******abc
3、count

语法:字符串1.count(字符串2) - 在字符串1中统计字符串2出现的次数

print(str1.count('a'))  # 1
4、join

字符串1.join(字符串2) - 将字符串1插入到字符串2中的每个字符之间

print("*".join('abc'))  # a*b*c
5、split

字符串1.split(字符串2) - 以字符串2去切割字符串1,返回一个列表

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

推荐阅读更多精彩内容