Day_04-字符串

一、获取字符

1.单个字符

原理:字符串中的每一个字符都会对应一个一的下标(索引)
下标:用来表示字符在字符串中的位置
下标方式
1.0开始依次增加 , 0 对应的第一个字符(0~字符串长度-1
2.-1开始依次减少 , -1 对应的是最后一个字符(-1~ - 字符串长度
a.语法
字符串[下标] - 获取字符串中指定下标的对应的字符
b 说明
字符串 - 字面量(只要结果是字符串的表达式都可以)字符串变量
[]- 固定写法
下标 - 需要获取的字符对应的下标
注意:这里的下标不能越界,否则会报错
示例:

result = 'how are you'[4]    
# 获取字符串下标是4的字符,并且赋给变量reault
print(result)    # a
result = 'how are you'[12]
# IndexError: string index out of range  
# 下标错误:字符串下标超过范围
str1 = 'good good study! day day up!' 
# str 类型名 会覆盖原来的类型功能,不报错,但是不建议作为变量名
print(str1[10])

2.部分字符(字符串切片)

方法1:

a. 语法
字符串[开始下标:结束下标:步长] - 从开始下标开始获取到结束下标为止(顾头不顾尾)
每次下标止加上步长去获取下一个元素
b. 说明
字符串 - 有结果的表达式
[] - 固定写法
开始下标、结束下标 - 下标值(下标可以越界
步长 - 整数(正数和负数都可以)
正数:从开始下标从前往后获取
负数:从开始下标从后往前获取

c. 注意
步长为:
要求开始下标对应的字符的位置必须在结束下标对应的字符的位置的 前面否则结果是空串
步长为:
要求开始下标对应的字符的位置必须在结束下标对应的字符的位置的后面否则结果是空串
示例:

str1 = 'hello python'
print(str1[0:4:-2])    # 切片的时候,倒过来取不到就是空串
print(str1[0:-1:2])    # 下标数值与大小无关

print('结果3', str1[-1:-100:-1])    # 结束下标越界
print('结果4', str1[100:-100:1])    # 下标越界

# 练习:获取一个字符串中所有下标奇数的字符(从前往后)
str2 = '1234567'
print(str2[1:100:2])   # 2 4 6

方法2:

字符串[开始下标:结束下标] - 省略步长
省略步长:默认步长为1
过程:从开始下标开始到结束下标为止,一个个取

方法3:字符串[:结束下标:步长](省略开始下标和结束下标)

a. 省略开始下标
步长为:从第一个字符开始取到结束下标为止
步长为:从字符串的最后一个字符开始取到结束下标为止

b. 省略结束下标
字符串[开始下标::步长]
步长为:从开始下标开始到最后一个字符为止;
步长为:从开始下标开始取到第一个字符为止
示例:

str4 = 'when i was yuong!'
print(str4[:6], str4[:6:-1])   # when i !gnouy saw
print(str4[2:], str4[2::-1])   # en i was yuong! ehw
print(str4[:])   # 从前到后
print(str4[::-1])  # 从后往前

:不会改变字符串的的结果,只是获取内容

二、字符串运算符

1. 数学运算符:+ *
2. 比较运算符:>, <, ==, !=, >=, <=
支持所有的比较运算符

1.数学运算符

a. +: 字符串1 + 字符串2
作用:将两个字符串拼接在一起产生一个新的字符串
注意:字符串只能是同类型的数据进行运算!
b. *: 字符串 * n - n是正整数
作用:字符串重复n次产生一个新的字符串

str1 = 'abc' + '123'
print(str1)

# print('abc' + 123)  # TypeError: must be str, not int
# 类型错误:必须是字符串,不能是整型

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

print('sdf' + 'dfd'*2)   # sdfdfddfd

2. 比较运算符

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

b.比较大小
第一步:两个字符串字符一一对应
第二步:找不同
第三步:判断不同字符的编码值
第四步:比较编码值的大小
应用
1 判断是否是小写字母:'a'<= char <= 'z'
2 判断是否是大写字母:'A'<= char <= 'Z'
3 判断是否是中文:'\u4e00' <= char <= '\u9fa5'
注意:这里字母必须加单引号

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

print('abdcb' > 'abcde')    # True

# 判断一个字符串中第三个字符是否是字母?
str3 = 'sdd34.erer'
char = str3[2]   # 取出第三个字符
print('是否是字母', 'a' <= char <= 'z' or 'A' <= char <= 'Z')
print('是否是中文:', '\u4e00' <= char <= '\u9fa5')

3.in 和 not in 操作

a.字符串1 in 字符串2 -> 判断字符串2中是否包含字符串1
(判断字符串1是否是字符串2子串

b.字符串1 not in 字符串2 -> 判断字符串2中是否不包含字符串1
(判断字符串1是否不是字符串2子串

# in
print('zhi' in 'hzhi isd')   # True
print('dfj' in 'ddddddd')    # False

# not in
print('zhi' not in 'hzhi isd')   # False
print('dfj' not in 'ddddddd')    # True

4. len函数

用法:len(序列)
目的:获取序列的长度即获取序列中元素的个数
输入:序列
输出:数字(包括0)

注意
一个转义字符:长度为1
一个编码字符:长度为1
一个空格:长度为1
一个tab键:长度为4
一个\t表示的tab键:长度为1
示例:

print(len('sdfd'))   # 4

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

str2 = '    abc'
print(len(str2))   # 7

三、格式化字符串

1. 什么是格式字符串?

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

语法:

包含占位符的字符串 % (每个占位符对应的变量)
包含占位符的字符串 % (值1, 值2, 值3....)
常见占位符:
%s (字符串)
%d (数字)
%f (小数) (%.nf 保留小数点后n位小数
%c (字符) (可以将编码值转换成字符)
% - 固定写法
() - 固定写法
:字符串中只有一个占位符的时候,这个()可以省略
- 个数和类型和位置一一对应,即值和占位符要一一对应

name = input('姓名:')
age = 18
sex = '男'
massage = '我叫%s,今年%d岁,性别:%s'
print(massage % (name, age, sex))

message = '我叫%s,今年%d, 性别:%s, \
月薪%f万' % (name, age, sex, 3.5)

print(message)      

:可以直接在print函数里面写,不用先保存在变量中

四、类型转换

1.基本语法

语法:
类型名(数据) - 将指定的数据转换成指定类型

说明
类型名 - 任何python支持的,或者是自定的类型都可以
数据 - 需要转换的对象(类型不同要求可能不同)

2. 转换实例

int(数据) - 将其他数据转换成整型
float(数据) - 将其他数据转换成浮点型
bool(数据) - 将其他类型转换成布尔
str(数据) - 将其他数据转换成字符串

a.整型

print(int(12.8)) # 浮点数可以转换成整数,直接保留整数部分
b = int(True) # 1 布尔可以转换成整数,True->1, False->0
print(b)
c = int('120')  # 只有去掉字符串的引号后本身就是
# 一个整数的字符串才能转换成整型
c = int('avd')   # 报错
# ValueError: invalid literal for int() with base 10: 'avd'
# 值错误:以10为基数的int()的文本无效:'avd'

b. 浮点型

a = float(100) # 所有整数都可以转换成浮点数,在后面加.0
b = float(True) # 布尔转换成浮点数,True->1.0,False->0.0
c = float('12.5')    
# 去掉引号后本身就是一个数字的字符串,能转换成浮点型
print(a, b, c)

c. 布尔类型
python中所有的数据都可以转换成布尔
:所有为空为0的值会转换成False,其他都是True

a = bool(100)
b = bool(0.0)
c = bool('')
d = bool([])
f = bool(None)
print(a, b, c, d, f)   # True False False False False

d. 字符串类型
所有的数据都可以转换成字符串,而且转化的时候就只是单纯的在外面加两个单引号
应用:字符串的拼接 字符串的运算

a = str(100)
print(type(100))    #  <class 'str'>

五、内置函数

使用方法:字符串.方法名()

1 capitalize()

目的:将字符串的第一个字母变成大写,其他字母变小写
返回值:首字母大写,其他字母小写的新字符串
注意:首字符如果是非字母,首字母不会转换成大写,会转换成小写

# 注意:只有第一个字符是字母的时候才有效
str1 = 'ddfff'
print(str1.capitalize())    # Ddfff
str="123 hello PYTHON"
str.capitalize()   # 123 hello python

2 字符串对齐方式

说明
width:字符串长度(整数),下同
fillchar:填充符号(字符),只能是单个字符,下同

  • center(width, fillchar)
    目的:居中

  • ljust(width, fillchar)
    目的:左对齐

  • rjust(width, fillchar)
    目的:右对齐
    示例:

str1 = 'abc'
print(str1.center(7, '0'))    # 00abc00
print(str1.ljust(7, '*'))     # abc****
print(str1.rjust(7, '='))     # ====abc

注意:当fillchar长度小于字符串长度时,会直接返回字符串
fillchar默认是空格

3 count(str)

用法:字符串1.count(字符串2)
目的: 在字符串1中统计字符串2出现的次数
输入:两个字符串(可以传参开始和结束下标)
输出:数字

print('ddfjdkfdfkd'.count('d'))   # 5

4 isalpha()

目的: 判断字符串中是否全是字母
注意非ASCII码表中的字符检测不出来

print('dfdfdj'.isalpha())   # True
print('dfdfw1j'.isalpha())   # False

5 join(seq)

用法:字符串1.join(字符串2)
目的:将字符串1插入到字符串2中
输入:两个字符串
输出:一个新的字符串
注意:每个字符之间,最前后不会插入

new_str = '*'.join('dffkd')
print(new_str)    # d*f*f*k*d

6 split

用法:字符串1.split(字符串2)
目的:以字符串2去切割字符串1
输入:两个字符串
输出:列表
应用:通过url获取图片的名字

print('12,34,34'.split(','))   # ['12', '34', '34']
url = "http://www.baidu.com/python/image/123456.jpg"
path =url.split("/")[-1]
print(path)    # 123456.jpg

7 zfill(width)

目的:长度为 width ,原字符串右对齐,前面填充0
补充:zfill(width)效果等同于rjust(width, '0')

num = input('进班顺序(1~50):')    # 12
id2 = 'py1809' + num.zfill(4)
print(id2)    # py18090012

8 isdecimal()

目的:检查字符串是否包含十进制字符
输出:布尔值

str1 = '123hnfd'
print('123errer'.isdecimal())   # False
print('12323'.isdecimal())   # True

9 upper()

目的:转换字符串中所有小写字母为大写
输出:新的字符串

print('djkdfd'.upper())  # DJKDFD

10 title()

目的:将多个单词的首字母转换成大写
输出:新的字符串
注意:非字母后的第一个字母转换成大写字母

print('mynameis'.title())    # Mynameis
print('my_name_is'.title())    # My_Name_Is

txt = "b2b2b2 3g3g3g"
x = txt.title()
print(x)    # B2B2B2 3G3G3G

11 swapcase()

目的:将字母大写转小写 and 小写转大写
输出:新的字符串
说明:就是将字母取反

print('dfDFfdf'.swapcase())    # DFdfFDF  

12 max(str)

目的:获取字符串 str 中最大的字母
输出:字符
注意:有大小写的字符串中返回的是小写字母的最大值

print(max('zheshi'))   # z
print(max('Zheshi'))  #s

13 min(str)

目的:获取字符串 str 中最小的字母
输出:字符
注意:有大小写的字符串中返回的是小写字母的最小值

print(min('znxjdsyeiw'))    # d
print(min('Znxjdsyeiw'))  #z

14 lower()

目的:转换字符串中所有大写为小写
输出:新的字符串

print('DFDFDKDFDdd'.lower())   # dfdfdkdfddd

15 istitle()

目的:如果字符串采用PEp8方式,但是单词首字母都是大写,返回 True,否则返回 False
输出:布尔值

print('dfjd_dfdjf'.istitle())   # False
print('My_Name'.istitle())   # True

16 isdigit()

目的:判断字符串是否只包含数字
输出:布尔值

print('dfdf343434'.isdigit())   # False
print('14343545454'.isdigit())    # True

17 isalnum()

目的:判断字符串至少有一个字符并且所有字符是否都是字母或数字
输出:布尔值

print(''.isalnum())    # False
print('ddffdff'.isalnum())   # True
print('123354'.isalnum())    # True
print('dfdf2434'.isalnum())    # True

18 isnumeric()

目的:判断字符串中是否只包含数字字符(中文数字也可以)
输出:布尔值

print('434838'.isnumeric())    # True
print('434fdfg'.isnumeric())    # False

19 isspace()

目的:判断字符串中是否为空白符(不是空串)
输出:布尔值
空白符:空格、制表符(\t)、换行(\n)、回车等(\r)

print(' '.isspace())    # True
print(''.isspace())    # False
print('dfdf'.isspace())    # False

20 lstrip([chars])

目的:截掉字符串左边的空格或指定字符。
输出:新的字符串

print(' dffdfd'.lstrip())    # dffdfd

21 islower()

目的:如果字符串中包含至少一个区分大小写的字符,判断所有这些(区分大小写的)字符是否都是小写
输出:布尔值

print('fdddfdfA'.islower())    # False
print('fdddfsdsf'.islower())    # True

22 isupper()

目的:如果字符串中包含至少一个区分大小写的字符,判断所有这些(区分大小写的)字符是否都是大写
输出:布尔值

print('fdddfsdsf'.isupper())    # False
print('DSDSDDSD'.isupper())    # True

23 rstrip([chars])

目的:删除字符串末尾的指定字符(默认为空格)
输出:新的字符串

demo = '我是一个例子:::'
demo_1 = '    真巧,我也是例子     '
print(demo.rstrip(':'))   # 我是一个例子
print(demo_1.rstrip())    #     真巧,我也是例子

24 strip([chars])

目的:移除字符串头尾指定的字符(默认为空格)或字符序列
输出:新的字符串
注意:只会删除两头,不会删中间
删除多个字符时:只要头尾有对应其中的某个字符即删除,不考虑顺序

str = "*****我是**一个**例子!!!*****"
print (str.strip('*'))   # 我是**一个**例子!!!
# 字符序列
str = "12我也是一个例子21"
print (str.strip('12'))  # 我也是一个例子

25 endswith(suffix[, start[, end]])

目的:判断字符串是否以指定后缀结尾
说明
suffix: 字符串或者是一个元素。
start: 开始下标
end: 结束下标
输出:布尔值
注意
start 参数以 0 为第一个字符索引值。
end 参数以 1 为第一个字符索引值。

Str = '哇塞,这是一个例子!!!'  
suffix = '!!'
print(Str.endswith(suffix))  # True
print(Str.endswith(suffix, 9))   # True
suffix = 'run'
print(Str.endswith(suffix))   # False
print(Str.endswith(suffix, 0, 19))  # False

26 replace(old, new[, max])

目的:将旧字符串替换成新的字符串
说明
old :将被替换的子字符串。
new : 新字符串,用于替换old子字符串。
max:可选字符串, 替换不超过 max 次
输出:新的字符串

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

推荐阅读更多精彩内容

  • 获取字符 1.获取单个字符 字符串中没一个字符都会对应一个下标(索引),用来表示字符在字符串中的位置下标是从0开始...
    哗啦噼里啪啦阅读 208评论 0 0
  • 一、对于昨天字符串的补充 3.字符串(str) 空串: '' ,"" (没有内容);空格字符串:' ' ,"...
    绝世小丑阅读 211评论 0 0
  • 1 字符编码 python中的编码采用的是Unicode编码。什么是编码?就是数字和字符的一一对应的,其中字符对应...
    barriers阅读 410评论 0 1
  • 1.什么是字符串序列,有序,不可变的用单引号或者双引号任意字符集, 2,字符串中的字符普通字符:'23', 'sd...
    哗啦噼里啪啦阅读 409评论 0 0
  • 字符串 1.什么是字符串 序列:有序,不可变的。用单引号或者双引号括起来的任意字符(集)。 2.字符串中的字符 a...
    落幕丶丶阅读 782评论 0 0