一些關(guān)于自己學(xué)習(xí)Python的經(jīng)歷的內(nèi)容肄程,遇到的問(wèn)題和思考等睦擂,方便以后查詢和復(fù)習(xí)得湘。
聲明:本人學(xué)習(xí)是在扇貝編程通過(guò)網(wǎng)絡(luò)學(xué)習(xí)的,相關(guān)的知識(shí)顿仇、案例來(lái)源于扇貝編程淘正。如果使用請(qǐng)說(shuō)明來(lái)源摆马。
第二十關(guān):字符串方法
字符串轉(zhuǎn)化
str = 'feel THE change'
str.upper()
# 將 str 轉(zhuǎn)成全大寫(xiě)并輸出
print(str)
str.lower()
# 將 str 轉(zhuǎn)成全小寫(xiě)并輸出
print(str)
str.swapcase()
# 將 str 進(jìn)行大小寫(xiě)互換并輸出
print(str)
str.title()
# 將 str “標(biāo)題化”并輸出
print(str)
結(jié)果是:
feel THE change
feel THEchange
feel THANGE change
feel THE change
原封不動(dòng)的打出來(lái)了,說(shuō)明轉(zhuǎn)化是沒(méi)有作用的鸿吆,所以想到轉(zhuǎn)化后需要賦值囤采,于是改為
str = 'feel THE change'
str = str.upper()
# 將 str 轉(zhuǎn)成全大寫(xiě)并輸出
print(str)
str = str.lower()
# 將 str 轉(zhuǎn)成全小寫(xiě)并輸出
print(str)
str = str.swapcase()
# 將 str 進(jìn)行大小寫(xiě)互換并輸出
print(str)
str = str.title()
# 將 str “標(biāo)題化”并輸出
print(str)
結(jié)果是:
FEEL THE CHANGE
feel the change
FEEL THECHANGE
Feel The Change
為什么第三個(gè)大小寫(xiě)相互轉(zhuǎn)換中,大寫(xiě)沒(méi)有變成小寫(xiě)呢
第三個(gè)時(shí)行時(shí)不行的惩淳,不知道怎么搞的
第三個(gè)之所以不對(duì)蕉毯,是因?yàn)榍皟蓚€(gè)步驟對(duì)str變量進(jìn)行重新賦值,第三個(gè)根據(jù)第二個(gè)賦值結(jié)果進(jìn)行大小寫(xiě)互換的黎泣,結(jié)果和答案不一致恕刘,答案或題意是針對(duì)原始的字符串進(jìn)行操作的。
經(jīng)過(guò)調(diào)試抒倚,只有第一個(gè)用賦值的方式褐着,第三個(gè)和答案不一樣,如果只是第二個(gè)用賦值的方式托呕,第三個(gè)也和答案不一樣含蓉,第一第二兩個(gè)都用賦值的方式,第三個(gè)也是和答案不一致项郊。其他三個(gè)不影響馅扣,是應(yīng)為其他三個(gè)都進(jìn)行統(tǒng)一的大寫(xiě)、小寫(xiě)着降、首字母大寫(xiě)差油,不管字符串是什么,結(jié)果都是一樣的任洞。而第三個(gè)是大小寫(xiě)互換的蓄喇,所以針對(duì)不同的字符串,操作結(jié)果就是不同的交掏。
str = 'feel THE change'
# 將 str 轉(zhuǎn)成全大寫(xiě)并輸出
print('feel THE change'.upper())? #可以直接用字符串加命令
# 將 str 轉(zhuǎn)成全小寫(xiě)并輸出
print(str.lower())? ?# 可以用變量加命令
str = str.swapcase()
# 將 str 進(jìn)行大小寫(xiě)互換并輸出
print(str)??# 可以轉(zhuǎn)化賦值之后妆偏,在用變量調(diào)用
# 將 str “標(biāo)題化”并輸出
print(str.title())
FEEL THE CHANGE
feel the change
FEEL the CHANGE
Feel The Change
這個(gè)時(shí)候,第三個(gè)又正常了盅弛,有點(diǎn)怪呢钱骂。原因見(jiàn)上面說(shuō)明。這段程序中挪鹏,因?yàn)榈谝粋€(gè)和第二個(gè)沒(méi)有對(duì)變量進(jìn)行重新賦值见秽,所以第三個(gè)可以對(duì)變量進(jìn)行賦值再打印,也可以直接打印轉(zhuǎn)化之后的結(jié)果讨盒,而結(jié)果都是對(duì)的解取,因?yàn)榇藭r(shí)都是針對(duì)原始字符串的操作惕医。
練習(xí):字符串變變變
請(qǐng)你使用 split()逞泄、join()和 strip() 方法將$帶-你-打-開(kāi)-編-程-世-界-的-大-門$ 變成帶~你~打~開(kāi)~編~程~世~界~的~大~門。
str = '$帶-你-打-開(kāi)-編-程-世-界-的-大-門$'
str1 = str.strip('$')?? #? 去掉頭和尾的$
#print(str1)
str2 = str1.split('-')?? #根據(jù)字符串分割了
#print(str2)
str3 = '~'.join(str2)?? #用~符號(hào)把第二步分割的字符串在鏈接起來(lái)
print(str3)
答案是把三個(gè)命令放到一起了潦嘶,先根據(jù)-把字符串給分解了创南,然后在用~把字符串鏈接起來(lái)伦忠,最后是去掉頭尾的$.
練習(xí):字符串操作
請(qǐng)按要求對(duì)字符串進(jìn)行相應(yīng)的操作。
str = 'feel the change'
# 輸出 str 中 e 的個(gè)數(shù)
print(str.count('e'))? ?#變量名.count(‘字符’)? 字符一定要用英文引號(hào)引起來(lái)
# 輸出 str 中 change 的索引值
print(str.find('change'))
# 將 str 中的 change 替換為CHANGE
print(str.replace('change', 'CHANGE'))? # 被替換的和用于替換的都要用英文引號(hào)引起來(lái)
最初我沒(méi)有用引號(hào)稿辙,結(jié)果報(bào)錯(cuò)了昆码。
例子:輸出格式化
format() 方法使用 {} 作為占位符,然后按照參數(shù)順序替換對(duì)應(yīng)的占位符邻储。
我們還可以給占位符編號(hào):
'我叫{0}赋咽,今年 {1} 歲,來(lái)自{2}'.format('小貝', 18, '南京')
# 我叫小貝吨娜,今年 18 歲脓匿,來(lái)自南京
# 調(diào)整編號(hào)順序
'我叫{2},今年 {1} 歲宦赠,來(lái)自{0}'.format('南京', 18, '小貝')
# 我叫小貝陪毡,今年 18 歲,來(lái)自南京
# 重復(fù)編號(hào)
'我叫{0}勾扭,{0}今年 {1} 歲毡琉,來(lái)自{2}'.format('小貝', 18, '南京')
# 我叫小貝,小貝今年 18 歲妙色,來(lái)自南京
我們還可以給占位符命名:
'我叫{name}桅滋,今年 {age} 歲,來(lái)自{city}'.format(name = '小貝', age = 18, city = '南京')
# 我叫小貝身辨,今年 18 歲丐谋,來(lái)自南京
# 命名后參數(shù)順序不再重要
'我叫{name},今年 {age} 歲栅表,來(lái)自{city}'.format(age = 18, city = '南京', name = '小貝')
# 我叫小貝笋鄙,今年 18 歲,來(lái)自南京
? print('今天%s的最高氣溫是%d度'%(weather[0], weather[1]))
?print('今天{}的最高氣溫是{}度'.format(weather[0], weather[1]))
對(duì)比兩種格式化輸出字符串的方法怪瓶,第一種操作符% 直接放在兩個(gè)部分之間
而使用format方法萧落,其前面必須有小點(diǎn).因?yàn)檫@是命令,命令和變量之間或字符之間要有小點(diǎn).鏈接
一個(gè)測(cè)驗(yàn)題
str = '$h-e-l-l-o w-o-r-l-d$'
print('.'.join(str.strip('$').split('-')))
將 '.'.join(str.strip('$').split('-')) 拆開(kāi)來(lái)看洗贰,先是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敛滋。
第一步先去掉頭尾的$许布,第二步使用-進(jìn)行分割,第三部使用小點(diǎn).進(jìn)行鏈接
練習(xí):拯救圓周率
魔鬼為了阻止人類進(jìn)步绎晃,將數(shù)學(xué)瑰寶圓周率占為己有蜜唾。為了滿足它的私欲杂曲,魔鬼對(duì)圓周率的前99 位進(jìn)行肆意篡改。
現(xiàn)在你偷偷潛入了魔鬼的地穴袁余,需要憑借智慧和利器 Python 將圓周率恢復(fù)擎勘。
現(xiàn)在可以公開(kāi)的情報(bào):
魔鬼最喜歡的數(shù)字是 '6',所以它將圓周率中的 '6' 都取走了颖榜,并以 '6' 為截點(diǎn)將圓周率切割棚饵,形成了一個(gè)“破碎的圓周率”,裝在列表broken_pi 之中掩完;
魔鬼最害怕的數(shù)字是 '9'噪漾,所以它將圓周率中的 '9' 都換成了空字符 ' ';
broken_pi 已被魔鬼打上了符咒且蓬,你需要從中取出碎片欣硼,才能對(duì)其進(jìn)行恢復(fù)。
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 中的碎片組合起來(lái)缅疟,用6鏈接列表中的各個(gè)元素
pi = pi.replace(' ', '9')? # 將 pi 中的 ' ' 還原成'9'
print(pi)
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170
第二十關(guān)筆記:
字符帶小寫(xiě)轉(zhuǎn)化:
upper() 用于將字符串中的小寫(xiě)字母轉(zhuǎn)為大寫(xiě)字母分别。
lower() 用于將字符串中的大寫(xiě)字母轉(zhuǎn)為小寫(xiě)字母。
capitalize() 用于將字符串的第一個(gè)字母變成大寫(xiě)存淫,其他字母變小寫(xiě)耘斩。首字符如果是非字母則不變,其他字母變小寫(xiě)桅咆。
title() 用于返回“標(biāo)題化”的字符串——即所有單詞的首字母轉(zhuǎn)為大寫(xiě)括授,其余字母均為小寫(xiě)。
注意:非字母后的第一個(gè)字母將轉(zhuǎn)為大寫(xiě)字母岩饼。
swapcase() 用于對(duì)字符串的大小寫(xiě)字母進(jìn)行互相轉(zhuǎn)換荚虚。
這些都是命令,所以需要用小點(diǎn).把命令和字符串或變量名鏈接起來(lái)籍茧,括號(hào)中不寫(xiě)內(nèi)容
操作結(jié)果可以賦值給變量版述。
分割、組合和移除方法
split() 字符串分割寞冯,用于通過(guò)指定分隔符對(duì)字符串進(jìn)行分割渴析。split() 方法有兩個(gè)可選參數(shù),第一個(gè)參數(shù)為分隔符吮龄,默認(rèn)為所有的空字符俭茧,包括空格、換行(\n)漓帚、制表符(\t)等母债。第二個(gè)參數(shù)為最大分割次數(shù),默認(rèn)為 -1,即不限次數(shù)毡们。
'扇 貝 編 程'.split()? # ['扇', '貝', '編', '程']? ??默認(rèn)利用空格進(jìn)行分割
'扇 貝 編 程'.split('')? # ['扇', '貝', '編', '程']? ?指定用空格進(jìn)行分割
'扇-貝-編-程'.split('-')? # ['扇', '貝', '編', '程']? 利用-進(jìn)行分割
'扇貝編程'.split('貝編')? # ['扇', '程']????????? 利用指定字符進(jìn)行分割
'扇 貝 編 程'.split('', 1)? # ['扇', '貝編 程']?? 利用空格分割迅皇,但是限制次數(shù)
join() 用于將序列中的元素以指定的字符連接生成一個(gè)新的字符串。join() 方法接收一個(gè)序列(列表衙熔、元組喧半、字符串等)作為參數(shù),. 前面的字符串用于連接符青责。
# 列表
''.join(['扇', '貝', '編', '程'])? #扇貝編程
'-'.join(['扇', '貝', '編', '程'])? #扇-貝-編-程
# 元組
'-'.join(('扇', '貝', '編', '程'))? #扇-貝-編-程
# 字符串
'-'.join('扇貝編程')? #扇-貝-編-程
列表、元組取具、字符串等里面的內(nèi)容都是用英文引號(hào)引起來(lái)
strip() 用于移除字符串開(kāi)頭和結(jié)尾指定的字符(默認(rèn)為空字符)或字符序列脖隶。當(dāng)傳入一個(gè)字符串時(shí),會(huì)將傳入字符串中每個(gè)字符依次移除暇检。
' 扇貝編程? '.strip()?# '扇貝編程'
'~~扇貝編程~~'.strip('~')? # '扇貝編程'
'~~扇貝~~編程~~'.strip('~')? # '扇貝~~編程'
'_~_扇貝編程_~~'.strip('~_')? # '扇貝編程'
去掉兩頭的空格或者符號(hào)产阱,不需要順序完全相同,括號(hào)中是指定要去除的內(nèi)容
定位與替換方法:
count()?用于統(tǒng)計(jì)字符串中某個(gè)字符串出現(xiàn)的次數(shù)块仆。第一個(gè)參數(shù)為要統(tǒng)計(jì)次數(shù)的字符串构蹬,后兩個(gè)可選參數(shù)為在字符串搜索的開(kāi)始與結(jié)束索引。
find()?用于檢測(cè)字符串中是否包含子字符串悔据,如果包含子字符串返回第一次出現(xiàn)的索引值庄敛,否則返回 -1。第一個(gè)參數(shù)為要查找的子字符串科汗,后兩個(gè)可選參數(shù)為在字符串搜索的開(kāi)始與結(jié)束索引藻烤。
replace()?用于將字符串中的指定字符串替換成別的字符串。第一個(gè)參數(shù)為被替換字符串头滔,第二個(gè)參數(shù)為替換字符串怖亭,第三個(gè)可選參數(shù)為替換的最多次數(shù),默認(rèn)為無(wú)限次坤检。
格式化輸出方法
除了之前說(shuō)的使用 % 運(yùn)算符 進(jìn)行字符串格式化輸出兴猩,我們還可以使用字符串的 format() 方法達(dá)到同樣的效果。
'我叫{}早歇,今年 {} 歲倾芝,來(lái)自{}'.format('小貝', 18, '南京')
# 我叫小貝,今年 18 歲缺前,來(lái)自南京
注意蛀醉,format前有個(gè)小黑點(diǎn),用來(lái)連接format命令和前面的變量名或者字符串
format() 方法使用{} 作為占位符衅码,然后按照參數(shù)順序替換對(duì)應(yīng)的占位符拯刁。
我們還可以給占位符編號(hào):
'我叫{0},今年 {1} 歲逝段,來(lái)自{2}'.format('小貝', 18, '南京')
# 我叫小貝垛玻,今年 18 歲割捅,來(lái)自南京
# 調(diào)整編號(hào)順序
'我叫{2},今年 {1} 歲帚桩,來(lái)自{0}'.format('南京', 18, '小貝')
# 我叫小貝亿驾,今年 18 歲,來(lái)自南京
# 重復(fù)編號(hào)
'我叫{0}账嚎,{0}今年 {1} 歲莫瞬,來(lái)自{2}'.format('小貝', 18, '南京')
# 我叫小貝,小貝今年 18 歲郭蕉,來(lái)自南京
我們還可以給占位符命名:
'我叫{name}疼邀,今年 {age} 歲,來(lái)自{city}'.format(name = '小貝', age = 18, city =
'南京')
# 我叫小貝召锈,今年 18 歲旁振,來(lái)自南京
# 命名后參數(shù)順序不再重要
'我叫{name},今年 {age} 歲涨岁,來(lái)自{city}'.format(age = 18, city = '南京', name = '小貝')
# 我叫小貝拐袜,今年 18 歲,來(lái)自南京