一些关于自己学习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 岁,来自南京