2020-07-09Python学习笔记20 字符串方法

一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习。

声明:本人学习是在扇贝编程通过网络学习的,相关的知识、案例来源于扇贝编程。如果使用请说明来源。

第二十关:字符串方法

字符串转化

str = 'feel THE change'

str.upper()

# 将 str 转成全大写并输出

print(str)

str.lower()

# 将 str 转成全小写并输出

print(str)

str.swapcase()

# 将 str 进行大小写互换并输出

print(str)

str.title()

# 将 str “标题化”并输出

print(str)

结果是:

feel THE change

feel THEchange

feel THANGE change

feel THE change

原封不动的打出来了,说明转化是没有作用的,所以想到转化后需要赋值,于是改为


str = 'feel THE change'

str = str.upper()

# 将 str 转成全大写并输出

print(str)

str = str.lower()

# 将 str 转成全小写并输出

print(str)

str = str.swapcase()

# 将 str 进行大小写互换并输出

print(str)

str = str.title()

# 将 str “标题化”并输出

print(str)

结果是:

FEEL THE CHANGE

feel the change

FEEL THECHANGE

Feel The Change

为什么第三个大小写相互转换中,大写没有变成小写呢

第三个时行时不行的,不知道怎么搞的

第三个之所以不对,是因为前两个步骤对str变量进行重新赋值,第三个根据第二个赋值结果进行大小写互换的,结果和答案不一致,答案或题意是针对原始的字符串进行操作的。

经过调试,只有第一个用赋值的方式,第三个和答案不一样,如果只是第二个用赋值的方式,第三个也和答案不一样,第一第二两个都用赋值的方式,第三个也是和答案不一致。其他三个不影响,是应为其他三个都进行统一的大写、小写、首字母大写,不管字符串是什么,结果都是一样的。而第三个是大小写互换的,所以针对不同的字符串,操作结果就是不同的。


str = 'feel THE change'

# 将 str 转成全大写并输出

print('feel THE change'.upper())  #可以直接用字符串加命令

# 将 str 转成全小写并输出

print(str.lower())   # 可以用变量加命令

str = str.swapcase()

# 将 str 进行大小写互换并输出

print(str)  # 可以转化赋值之后,在用变量调用

# 将 str “标题化”并输出

print(str.title())

FEEL THE CHANGE

feel the change

FEEL the CHANGE

Feel The Change

这个时候,第三个又正常了,有点怪呢。原因见上面说明。这段程序中,因为第一个和第二个没有对变量进行重新赋值,所以第三个可以对变量进行赋值再打印,也可以直接打印转化之后的结果,而结果都是对的,因为此时都是针对原始字符串的操作。

练习:字符串变变变

请你使用 split()、join()和 strip() 方法将$带-你-打-开-编-程-世-界-的-大-门$ 变成带~你~打~开~编~程~世~界~的~大~门。

str = '$带-你-打-开-编-程-世-界-的-大-门$'

str1 = str.strip('$')   #  去掉头和尾的$

#print(str1)

str2 = str1.split('-')   #根据字符串分割了

#print(str2)

str3 = '~'.join(str2)   #用~符号把第二步分割的字符串在链接起来

print(str3)

答案是把三个命令放到一起了,先根据-把字符串给分解了,然后在用~把字符串链接起来,最后是去掉头尾的$.


练习:字符串操作

请按要求对字符串进行相应的操作。

str = 'feel the change'

# 输出 str 中 e 的个数

print(str.count('e'))   #变量名.count(‘字符’)  字符一定要用英文引号引起来

# 输出 str 中 change 的索引值

print(str.find('change'))

# 将 str 中的 change 替换为CHANGE

print(str.replace('change', 'CHANGE'))  # 被替换的和用于替换的都要用英文引号引起来

最初我没有用引号,结果报错了。

例子:输出格式化

format() 方法使用 {} 作为占位符,然后按照参数顺序替换对应的占位符。

我们还可以给占位符编号:

'我叫{0},今年 {1} 岁,来自{2}'.format('小贝', 18, '南京')

# 我叫小贝,今年 18 岁,来自南京

# 调整编号顺序

'我叫{2},今年 {1} 岁,来自{0}'.format('南京', 18, '小贝')

# 我叫小贝,今年 18 岁,来自南京

# 重复编号

'我叫{0},{0}今年 {1} 岁,来自{2}'.format('小贝', 18, '南京')

# 我叫小贝,小贝今年 18 岁,来自南京

我们还可以给占位符命名:

'我叫{name},今年 {age} 岁,来自{city}'.format(name = '小贝', age = 18, city = '南京')

# 我叫小贝,今年 18 岁,来自南京

# 命名后参数顺序不再重要

'我叫{name},今年 {age} 岁,来自{city}'.format(age = 18, city = '南京', name = '小贝')

# 我叫小贝,今年 18 岁,来自南京


  print('今天%s的最高气温是%d度'%(weather[0], weather[1]))

 print('今天{}的最高气温是{}度'.format(weather[0], weather[1]))

对比两种格式化输出字符串的方法,第一种操作符% 直接放在两个部分之间

而使用format方法,其前面必须有小点.因为这是命令,命令和变量之间或字符之间要有小点.链接

一个测验题

str = '$h-e-l-l-o w-o-r-l-d$'

print('.'.join(str.strip('$').split('-')))


将 '.'.join(str.strip('$').split('-')) 拆开来看,先是str.strip('$') 得到 h-e-l-l-o w-o-r-l-d,再 'h-e-l-l-o w-o-r-l-d'.split('-') 得到 ['h', 'e', 'l', 'l', 'o

w', 'o', 'r', 'l', 'd'],最后'.'.join(['h', 'e', 'l', 'l', 'o w', 'o', 'r', 'l', 'd']) 得到 h.e.l.l.o w.o.r.l.d。

第一步先去掉头尾的$,第二步使用-进行分割,第三部使用小点.进行链接


练习:拯救圆周率

魔鬼为了阻止人类进步,将数学瑰宝圆周率占为己有。为了满足它的私欲,魔鬼对圆周率的前99 位进行肆意篡改。

现在你偷偷潜入了魔鬼的地穴,需要凭借智慧和利器 Python 将圆周率恢复。

现在可以公开的情报:

魔鬼最喜欢的数字是 '6',所以它将圆周率中的 '6' 都取走了,并以 '6' 为截点将圆周率切割,形成了一个“破碎的圆周率”,装在列表broken_pi 之中;

魔鬼最害怕的数字是 '9',所以它将圆周率中的 '9' 都换成了空字符 ' ';

broken_pi 已被魔鬼打上了符咒,你需要从中取出碎片,才能对其进行恢复。

broken_pi = [

 '3.1415 2',

  '53587 32384',

 '2',

 '4338327 5028841 71',

  '3  375105820 74 445 230781',

 '40',

 '28',

 '208  8',

 '280348253421170'

]

pi = '6'.join(broken_pi)  # 使用 '6' 将 broken_pi 中的碎片组合起来,用6链接列表中的各个元素

pi = pi.replace(' ', '9')  # 将 pi 中的 ' ' 还原成'9'

print(pi)

3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170

第二十关笔记:

字符带小写转化:

upper() 用于将字符串中的小写字母转为大写字母。

lower() 用于将字符串中的大写字母转为小写字母。

capitalize() 用于将字符串的第一个字母变成大写,其他字母变小写。首字符如果是非字母则不变,其他字母变小写。

title() 用于返回“标题化”的字符串——即所有单词的首字母转为大写,其余字母均为小写。

注意:非字母后的第一个字母将转为大写字母。

swapcase() 用于对字符串的大小写字母进行互相转换。

这些都是命令,所以需要用小点.把命令和字符串或变量名链接起来,括号中不写内容

操作结果可以赋值给变量。


分割、组合和移除方法

split() 字符串分割,用于通过指定分隔符对字符串进行分割。split() 方法有两个可选参数,第一个参数为分隔符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等。第二个参数为最大分割次数,默认为 -1,即不限次数。

'扇 贝 编 程'.split()  # ['扇', '贝', '编', '程']    默认利用空格进行分割

'扇 贝 编 程'.split('')  # ['扇', '贝', '编', '程']   指定用空格进行分割

'扇-贝-编-程'.split('-')  # ['扇', '贝', '编', '程']  利用-进行分割

'扇贝编程'.split('贝编')  # ['扇', '程']          利用指定字符进行分割

'扇 贝 编 程'.split('', 1)  # ['扇', '贝编 程']   利用空格分割,但是限制次数


join() 用于将序列中的元素以指定的字符连接生成一个新的字符串。join() 方法接收一个序列(列表、元组、字符串等)作为参数,. 前面的字符串用于连接符。

# 列表

''.join(['扇', '贝', '编', '程'])  #扇贝编程

'-'.join(['扇', '贝', '编', '程'])  #扇-贝-编-程

# 元组

'-'.join(('扇', '贝', '编', '程'))  #扇-贝-编-程

# 字符串

'-'.join('扇贝编程')  #扇-贝-编-程

列表、元组、字符串等里面的内容都是用英文引号引起来


strip() 用于移除字符串开头和结尾指定的字符(默认为空字符)或字符序列。当传入一个字符串时,会将传入字符串中每个字符依次移除。

' 扇贝编程  '.strip() # '扇贝编程'

'~~扇贝编程~~'.strip('~')  # '扇贝编程'

'~~扇贝~~编程~~'.strip('~')  # '扇贝~~编程'

'_~_扇贝编程_~~'.strip('~_')  # '扇贝编程'

去掉两头的空格或者符号,不需要顺序完全相同,括号中是指定要去除的内容

定位与替换方法:

count() 用于统计字符串中某个字符串出现的次数。第一个参数为要统计次数的字符串,后两个可选参数为在字符串搜索的开始与结束索引。


find() 用于检测字符串中是否包含子字符串,如果包含子字符串返回第一次出现的索引值,否则返回 -1。第一个参数为要查找的子字符串,后两个可选参数为在字符串搜索的开始与结束索引。


replace() 用于将字符串中的指定字符串替换成别的字符串。第一个参数为被替换字符串,第二个参数为替换字符串,第三个可选参数为替换的最多次数,默认为无限次。


格式化输出方法

除了之前说的使用 % 运算符 进行字符串格式化输出,我们还可以使用字符串的 format() 方法达到同样的效果。


'我叫{},今年 {} 岁,来自{}'.format('小贝', 18, '南京')

# 我叫小贝,今年 18 岁,来自南京

注意,format前有个小黑点,用来连接format命令和前面的变量名或者字符串

format() 方法使用{} 作为占位符,然后按照参数顺序替换对应的占位符。


我们还可以给占位符编号:

'我叫{0},今年 {1} 岁,来自{2}'.format('小贝', 18, '南京')

# 我叫小贝,今年 18 岁,来自南京


# 调整编号顺序

'我叫{2},今年 {1} 岁,来自{0}'.format('南京', 18, '小贝')

# 我叫小贝,今年 18 岁,来自南京


# 重复编号

'我叫{0},{0}今年 {1} 岁,来自{2}'.format('小贝', 18, '南京')

# 我叫小贝,小贝今年 18 岁,来自南京


我们还可以给占位符命名:

'我叫{name},今年 {age} 岁,来自{city}'.format(name = '小贝', age = 18, city =

'南京')

# 我叫小贝,今年 18 岁,来自南京


# 命名后参数顺序不再重要

'我叫{name},今年 {age} 岁,来自{city}'.format(age = 18, city = '南京', name = '小贝')

# 我叫小贝,今年 18 岁,来自南京


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