《Python程序設(shè)計(jì)入門與實(shí)踐(第2版)》課件 第6章 字符串_第1頁(yè)
《Python程序設(shè)計(jì)入門與實(shí)踐(第2版)》課件 第6章 字符串_第2頁(yè)
《Python程序設(shè)計(jì)入門與實(shí)踐(第2版)》課件 第6章 字符串_第3頁(yè)
《Python程序設(shè)計(jì)入門與實(shí)踐(第2版)》課件 第6章 字符串_第4頁(yè)
《Python程序設(shè)計(jì)入門與實(shí)踐(第2版)》課件 第6章 字符串_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6章字符串

本章學(xué)習(xí)目標(biāo)了解字符串不同編碼格式的區(qū)別理解字符串編碼與字節(jié)串解碼的作用熟練掌握運(yùn)算符、內(nèi)置函數(shù)、切片對(duì)字符串的操作熟練掌握字符串方法了解標(biāo)準(zhǔn)庫(kù)string、zlib、json的基本用法了解擴(kuò)展庫(kù)jieba在中文分詞、詞性判斷方面的應(yīng)用了解擴(kuò)展庫(kù)pypinyin在中文拼音轉(zhuǎn)換方面的基本用法了解繁體中文與簡(jiǎn)體中文互相轉(zhuǎn)換的原理和使用6.1字符串方法及應(yīng)用-6.1.1字符串常用方法清單方法功能簡(jiǎn)介capitalize()返回首字母大寫(如果是字母的話)、其余字母全部小寫的新字符串,不影響原字符串;如果原字符串首字符不是字母,功能與lower()相似,返回所有字母轉(zhuǎn)換為小寫的新字符串casefold()返回原字符串所有字符都變?yōu)樾懙淖址?,比lower()功能強(qiáng)大一些。例如,'?'.casefold()的結(jié)果為'ss',而'?'.lower()的結(jié)果仍為'?'center(width,fillchar='',/)ljust(width,fillchar='',/)rjust(width,fillchar='',/)返回指定長(zhǎng)度的新字符串,當(dāng)前字符串所有字符在新字符串中居中/居左/居右,如果參數(shù)width指定的新字符串長(zhǎng)度大于當(dāng)前字符串長(zhǎng)度就在兩側(cè)/右側(cè)/左側(cè)使用參數(shù)fillchar指定的字符進(jìn)行填充;如果參數(shù)width指定的長(zhǎng)度小于或等于當(dāng)前字符串的長(zhǎng)度,直接返回當(dāng)前字符串,不會(huì)進(jìn)行截?cái)郼ount(sub[,start[,end]])返回子串sub在當(dāng)前字符串下標(biāo)范圍[start,end)內(nèi)不重疊出現(xiàn)的次數(shù),參數(shù)start如果不賦值則默認(rèn)為0,參數(shù)end如果不賦值則默認(rèn)為字符串長(zhǎng)度。例如,'abababab'.count('aba')的值為26.1.1字符串常用方法清單encode(encoding='utf-8',errors='strict')返回當(dāng)前字符串使用參數(shù)encoding指定的編碼格式編碼后的字節(jié)串endswith(suffix[,start[,end]])startswith(prefix[,start[,end]])如果當(dāng)前字符串下標(biāo)范圍[start,end)的子串以某個(gè)字符串suffix/prefix或元組suffix/prefix指定的幾個(gè)字符串之一結(jié)束/開始則返回True,否則返回Falseexpandtabs(tabsize=8)返回當(dāng)前字符串中所有Tab鍵都替換為合適數(shù)量(使得Tab鍵后面的字符從下一個(gè)制表位開始,制表位大小默認(rèn)為8)個(gè)空格之后的新字符串,不影響原字符串find(sub[,start[,end]])rfind(sub[,start[,end]])返回子串sub在當(dāng)前字符串下標(biāo)范圍[start,end)內(nèi)出現(xiàn)的最小/最大下標(biāo)位置,不存在時(shí)返回-16.1.1字符串常用方法清單format(*args,**kwargs)format_map(mapping)返回對(duì)當(dāng)前字符串進(jìn)行格式化(格式化是指把字符串中的占位符替換為實(shí)際值并以指定的格式呈現(xiàn))后的新字符串,其中args表示位置參數(shù),kwargs表示關(guān)鍵參數(shù);mapping一般為字典形式的參數(shù),例如'{a},'.format_map({'a':3,'b':5})的結(jié)果為'3,5',原字符串中的{a}和是占位符,在格式化時(shí)會(huì)分別替換為a和b的值index(sub[,start[,end]])rindex(sub[,start[,end]])返回子串sub在當(dāng)前字符串下標(biāo)范圍[start,end)內(nèi)出現(xiàn)的最小/最大下標(biāo)位置,不存在時(shí)拋出ValueError異常isalnum()、isalpha()、isascii()、isprintable()、islower()、isupper()、isspace()、isnumeric()、isdecimal()、isdigit()測(cè)試當(dāng)前字符串(要求至少包含一個(gè)字符)是否所有字符都是字母或數(shù)字、字母、ASCII字符、可打印字符、小寫字母(此時(shí)只測(cè)試區(qū)分大小寫的字母)、大寫字母(此時(shí)只測(cè)試區(qū)分大小寫的字母)、空白字符(包括空格、換行符、制表符)、數(shù)字字符,是則返回True,否則返回Falseisidentifier()如果當(dāng)前字符串可以作為標(biāo)識(shí)符(變量名、函數(shù)名、類名)則返回True,否則返回False6.1.1字符串常用方法清單istitle()如果當(dāng)前字符串中每個(gè)單詞(一段連續(xù)的英文字母)的第一個(gè)字母為大寫而其他字母都為小寫則返回True,否則返回False。例如,'3Ab1324Cd'和'3AbCd'都符合這樣的要求join(iterable,/)使用當(dāng)前字符串作為連接符把參數(shù)iterable中的所有字符串連接成為一個(gè)長(zhǎng)字符串并返回連接之后的長(zhǎng)字符串,要求參數(shù)iterable指定的可迭代對(duì)象中所有元素全部為字符串lower()upper()返回當(dāng)前字符串中所有字母都變?yōu)樾?大寫之后的新字符串,非字母字符保持不變lstrip(chars=None,/)rstrip(chars=None,/)strip(chars=None,/)返回當(dāng)前字符串刪除左側(cè)/右側(cè)/兩側(cè)的空白字符或參數(shù)chars中所有字符之后的新字符串maketrans(...)根據(jù)參數(shù)給定的字典或者兩個(gè)等長(zhǎng)字符串對(duì)應(yīng)位置的字符,構(gòu)造并返回字符映射表(形式上是字典,“鍵”和“值”都是字符的Unicode編碼),如果指定了第三個(gè)參數(shù)(必須為字符串)則該參數(shù)中所有字符都被映射為空值None。該方法是字符串類str的靜態(tài)方法(這個(gè)術(shù)語(yǔ)看不懂沒關(guān)系,不影響使用),可以通過(guò)任意字符串進(jìn)行調(diào)用,也可以直接通過(guò)字符串類str進(jìn)行調(diào)用6.1.1字符串常用方法清單partition(sep,/)rpartition(sep,/)在當(dāng)前字符串中從左向右/從右向左查找參數(shù)字符串sep的第一次出現(xiàn),然后把當(dāng)前字符串切分為3部分并返回包含這3部分的元組(原字符串中sep前的子串,sep,原字符串中sep后面的子串)。如果當(dāng)前字符串中沒有子串sep,返回包含當(dāng)前字符串和2個(gè)空串的元組(原字符串,'','')removeprefix(prefix,/)removesuffix(suffix,/)如果當(dāng)前字符串以參數(shù)prefix/suffix指定的非空字符串開始/結(jié)束,就返回刪除prefix/suffix之后的字符串,否則返回原字符串。該方法適用于Python3.9以及更新版本replace(old,new,count=-1,/)返回當(dāng)前字符串中所有子串old都被替換為子串new之后的新字符串,參數(shù)count用來(lái)指定最大替換次數(shù),-1表示全部替換rsplit(sep=None,maxsplit=-1)split(sep=None,maxsplit=-1)使用參數(shù)sep指定的字符串對(duì)當(dāng)前字符串從后向前/從前向后進(jìn)行切分,返回包含切分后所有子串的列表。參數(shù)sep=None時(shí)表示使用所有空白字符作為分隔符并丟棄切分結(jié)果中的所有空字符串,參數(shù)maxsplit表示最大切分次數(shù),-1表示沒有限制6.1.1字符串常用方法清單splitlines(keepends=False)使用換行符作為分隔符把當(dāng)前字符串切分為多行,返回包含每行字符串的列表,參數(shù)keepends=True時(shí)得到的每行字符串最后包含換行符,默認(rèn)情況下不包含換行符swapcase()返回當(dāng)前字符串大小寫交換(也就是大寫字母變?yōu)樾懽帜?,小寫字母變?yōu)榇髮懽帜福┲蟮男伦址亲帜缸址3植蛔僼itle()返回當(dāng)前字符串中每個(gè)單詞(一串連續(xù)的英文字母,不一定是英語(yǔ)中存在的單詞)都變?yōu)槭鬃帜复髮懚渌帜付夹懙男伦址?。例如?1abc234de5fghi'.title()的結(jié)果為'1Abc234De5FGhi'translate(table,/)根據(jù)參數(shù)table指定的映射表對(duì)當(dāng)前字符串中的字符進(jìn)行替換并返回替換后的新字符串,不影響原字符串,參數(shù)table一般為字符串方法maketrans()創(chuàng)建的映射表,其中映射為空值None的字符將會(huì)被刪除而不出現(xiàn)在新字符串中zfill(width,/)功能相當(dāng)于參數(shù)fillchar為字符'0'的rjust()方法6.1.2字符串編碼與字節(jié)串解碼在計(jì)算機(jī)內(nèi)部,文本、圖像、音視頻等所有形式的數(shù)據(jù)最終都以二進(jìn)制補(bǔ)碼形式進(jìn)行存儲(chǔ)和表示,每種類型的數(shù)據(jù)與對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)之間的互相轉(zhuǎn)換都必須遵守嚴(yán)格的規(guī)范。字符串編碼格式用來(lái)確定如何把字符串轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)(字節(jié)串)進(jìn)行存儲(chǔ),以及如何把二進(jìn)制數(shù)據(jù)還原為字符串。6.1.2字符串編碼與字節(jié)串解碼最早的字符串編碼是美國(guó)標(biāo)準(zhǔn)信息交換碼ASCII,采用1個(gè)字節(jié)進(jìn)行編碼,表示能力非常有限,僅對(duì)10個(gè)數(shù)字、26個(gè)大寫英文字母、26個(gè)小寫英文字母、英文標(biāo)點(diǎn)符號(hào)以及一些其他符號(hào)進(jìn)行了編碼。在ASCII碼表中,數(shù)字字符是連續(xù)編碼的,字符0的ASCII碼是48,字符1的ASCII是49,以此類推。大寫字母也是連續(xù)編碼的,大寫字母A的ASCII碼是65,大寫字母B的ASCII碼是66,以此類推。小寫字母也是連續(xù)編碼的,小寫字母a的ASCII碼是97,小寫字母b的ASCII碼是98,以此類推。6.1.2字符串編碼與字節(jié)串解碼GB2312是我國(guó)制定的編碼規(guī)范,使用1個(gè)字節(jié)兼容ASCII碼,使用2個(gè)字節(jié)表示中文。GBK是GB2312的擴(kuò)充,CP936是微軟在GBK基礎(chǔ)上開發(fā)的編碼格式。GB2312、GBK和CP936都是使用2個(gè)字節(jié)表示中文。UTF-8對(duì)全世界所有國(guó)家的文字符進(jìn)行了編碼,使用1個(gè)字節(jié)兼容ASCII碼,使用3個(gè)字節(jié)表示常見漢字。GB2312、GBK、CP936、UTF-8對(duì)ASCII字符的處理方式是一樣的,同一串ASCII字符使用這幾種不同編碼格式編碼得到的字節(jié)串是一樣的。除了這幾種常用的之外,還有UTF-16、UTF-32、UTF-7、MBCS等其他編碼格式,但使用較少,可以參考Python標(biāo)準(zhǔn)庫(kù)codecs了解更多信息。6.1.2字符串編碼與字節(jié)串解碼字符串方法encode(encoding='utf-8',errors='strict')使用指定的編碼格式把字符串編碼為字節(jié)串,默認(rèn)使用UTF-8編碼格式,參數(shù)encoding的值不區(qū)分大小寫,'utf8'、'utf-8'、'UTF-8'和'UTF8'都表示使用UTF-8編碼格式,'gbk'和'GBK'也是等價(jià)的。字節(jié)串的方法decode(encoding='utf-8',errors='strict')使用指定的編碼格式把字節(jié)串解碼為字符串,默認(rèn)使用UTF-8編碼格式。6.1.2字符串編碼與字節(jié)串解碼>>>book_name='《Pyhon程序設(shè)計(jì)入門與實(shí)踐教程》,董付國(guó)編著'#使用UTF-8編碼格式編碼為字節(jié)串>>>print(book_name.encode())b'\xe3\x80\x8aPyhon\xe7\xa8\x8b\xe5\xba\x8f\xe8\xae\xbe\xe8\xae\xa1\xe5\x85\xa5\xe9\x97\xa8\xe4\xb8\x8e\xe5\xae\x9e\xe8\xb7\xb5\xe6\x95\x99\xe7\xa8\x8b\xe3\x80\x8b\xef\xbc\x8c\xe8\x91\xa3\xe4\xbb\x98\xe5\x9b\xbd\xe7\xbc\x96\xe8\x91\x97'#使用GBK編碼格式編碼為字節(jié)串>>>print(book_name.encode('gbk'))b'\xa1\xb6Pyhon\xb3\xcc\xd0\xf2\xc9\xe8\xbc\xc6\xc8\xeb\xc3\xc5\xd3\xeb\xca\xb5\xbc\xf9\xbd\xcc\xb3\xcc\xa1\xb7\xa3\xac\xb6\xad\xb8\xb6\xb9\xfa\xb1\xe0\xd6\xf8'6.1.2字符串編碼與字節(jié)串解碼#通過(guò)字符串類str調(diào)用encode()方法,通過(guò)參數(shù)指定要編碼的字符串#這種用法很少使用,知道即可>>>print(str.encode(book_name,'gbk'))b'\xa1\xb6Pyhon\xb3\xcc\xd0\xf2\xc9\xe8\xbc\xc6\xc8\xeb\xc3\xc5\xd3\xeb\xca\xb5\xbc\xf9\xbd\xcc\xb3\xcc\xa1\xb7\xa3\xac\xb6\xad\xb8\xb6\xb9\xfa\xb1\xe0\xd6\xf8'#把字符串編碼為字節(jié)串后使用decode()方法解碼為字符串>>>print(book_name.encode('gbk').decode('gbk'))《Pyhon程序設(shè)計(jì)入門與實(shí)踐教程》,董付國(guó)編著#使用GBK編碼得到的字節(jié)串無(wú)法使用UTF-8正常解碼,反之亦然>>>print(book_name.encode('gbk').decode('utf8'))UnicodeDecodeError:'utf-8'codeccan'tdecodebyte0xa1inposition0:invalidstartbyte#即使偶爾能解碼成功,也得不到原來(lái)的字符串,例如下面的情況>>>print('偉大'.encode().decode('gbk'))浼熷ぇ6.1.3字符串格式化在Python目前的主流版本(Python3.6/3.73.8/3.9/3.10)中,主要支持三種字符串格式化的語(yǔ)法:運(yùn)算符%、format()方法和格式化字符串字面值(俗稱f-字符串)。6.1.3字符串格式化(1)運(yùn)算符%6.1.3字符串格式化格式字符簡(jiǎn)要說(shuō)明%s字符串(等價(jià)于內(nèi)置函數(shù)str())%r字符串(等價(jià)于內(nèi)置函數(shù)repr())%c單個(gè)字符%d十進(jìn)制整數(shù)%i十進(jìn)制整數(shù)%o八進(jìn)制整數(shù)%x十六進(jìn)制整數(shù)%e指數(shù)(基底寫為e)%E指數(shù)(基底寫為E)%f、%F浮點(diǎn)數(shù)%g指數(shù)(e)或浮點(diǎn)數(shù)(根據(jù)顯示長(zhǎng)度)%G指數(shù)(E)或浮點(diǎn)數(shù)(根據(jù)顯示長(zhǎng)度)%%一個(gè)字符%6.1.3字符串格式化#把65作為Unicode編碼轉(zhuǎn)換為對(duì)應(yīng)的字符,等價(jià)于chr(65)>>>print('%c'%65)A#支持漢字Unicode編碼到字符的轉(zhuǎn)換>>>print('%c%c%c'%(33891,20184,22269))董付國(guó)#%-3d表示把整數(shù)格式化為長(zhǎng)度為3的字符串,左對(duì)齊,%.2f表示把實(shí)數(shù)格式化為保留2位小數(shù)的字符串#%7x表示把整數(shù)格式化為長(zhǎng)度為7的十六進(jìn)制形式的字符串,右對(duì)齊,前面補(bǔ)空格>>>print('a%-3db%.2fc%7x'%(6,3.1415926,666))a6b3.14c29a#格式和數(shù)據(jù)的數(shù)量不一樣,出錯(cuò)拋出異常>>>print('%d,%c,%x,%o,%08d'%(33891,33891,33891,33891))TypeError:notenoughargumentsforformatstring#%08d表示把整數(shù)格式化為長(zhǎng)度為8的字符串,右對(duì)齊,前面補(bǔ)0>>>print('%d,%c,%x,%o,%08d'%(33891,33891,33891,33891,33891))33891,董,8463,102143,00033891#%+d表示把整數(shù)格式化為字符串,正數(shù)前面顯示正號(hào)“+”>>>print('%d,%+d'%(666,666))666,+6666.1.3字符串格式化(2)format()、format_map()方法#0表示format()方法的參數(shù)下標(biāo),對(duì)應(yīng)于第一個(gè)參數(shù)#.4f表示格式化為實(shí)數(shù),并且恰好保留4位小數(shù),如果原始值不夠4位小數(shù),右側(cè)補(bǔ)0>>>print('{0:.4f}'.format(10/4))2.5000>>>print('{0:.4f}'.format(10/3))3.3333>>>print('{0:.4f}'.format(1000/3))333.3333#保留4位有效數(shù)字>>>print('{0:.4}'.format(10/3))3.333>>>print('{0:.4}'.format(1000/3))333.3>>>print('{0:.4}'.format(100000/3))3.333e+046.1.3字符串格式化#格式化為百分?jǐn)?shù),保留2位小數(shù)>>>print('{0:.2%}'.format(1/3))33.33%#對(duì)同一個(gè)數(shù)據(jù)進(jìn)行多次格式化#格式化為實(shí)數(shù)形式,總寬度為10,保留2位小數(shù)#<表示左對(duì)齊,^表示居中,>表示右對(duì)齊>>>print('{0:<10.2f},{0:^10.2f},{0:>10.2f}'.format(1/3))0.33,0.33,0.33#逗號(hào)表示在數(shù)字字符串中插入逗號(hào)作為千分符,#x表示格式化為十六進(jìn)制數(shù)##o表示格式化為八進(jìn)制數(shù)>>>print('{0:,}inhexis:{0:#x},inoctis:{0:#o}'.format(66666))66,666inhexis:0x1046a,inoctis:0o2021526.1.3字符串格式化#可以先格式化下標(biāo)為1的參數(shù),再格式化下標(biāo)為0的參數(shù)#格式o表示八進(jìn)制數(shù),但不帶前面的引導(dǎo)符0o#格式x表示格式化為十六進(jìn)制,但不帶前面的引導(dǎo)符0x>>>print('{1}inhexis:{1:x},{0}inoctis:{0:o}'.format(6666,66666))66666inhexis:1046a,6666inoctis:15012#_表示在數(shù)字中插入下畫線作為千分符,Python3.6開始支持>>>print('{0:_},{0:#_x},{0:_o}'.format(10000000))10_000_000,0x98_9680,4611_3200#使用逗號(hào)作為千分符,僅適用于十進(jìn)制數(shù)>>>print('{0:,d}'.format(10000000))10,000,0006.1.3字符串格式化#試圖在八進(jìn)制數(shù)中插入逗號(hào)千分符,拋出異常>>>print('{0:,o}'.format(10000000))ValueError:Cannotspecify','with'o'.#在正數(shù)前面顯示正號(hào)>>>print('{0:+d},{0:+.3f}'.format(333))+333,+333.000#使用變量名作占位符,使用關(guān)鍵參數(shù)指定要格式化的數(shù)據(jù)>>>print('{name},{age}'.format(name='ZhangSan',age=40))ZhangSan,40#使用變量名作占位符時(shí),一樣可以指定詳細(xì)的格式#名字格式化為長(zhǎng)度為10的字符串,左對(duì)齊,右側(cè)補(bǔ)空格#年齡格式化為長(zhǎng)度為6的字符串,右對(duì)齊,左側(cè)補(bǔ)空格>>>print('{name:<10},{age:>6}'.format(name='ZhangSan',age=40))ZhangSan,40#-和=表示當(dāng)指定的寬度大于實(shí)際長(zhǎng)度時(shí)使用的填充字符>>>print('{name:-<10},{age:=>6}'.format(name='ZhangSan',age=40))ZhangSan-,====406.1.3字符串格式化#可以同時(shí)使用位置參數(shù)和關(guān)鍵參數(shù),但一般不建議這樣使用>>>print('{0},{1},{a},'.format(34,45,a=97,b=98))34,45,97,98#試圖以位置參數(shù)的方式訪問關(guān)鍵參數(shù)的值,拋出異常>>>print('{0},{1},{2},'.format(34,45,a=97,b=98))Traceback(mostrecentcalllast):File"<pyshell#172>",line1,in<module>print('{0},{1},{2},'.format(34,45,a=97,b=98))IndexError:Replacementindex2outofrangeforpositionalargstuple#使用format_map()方法時(shí)可以使用字典作參數(shù)指定要格式化的數(shù)據(jù)>>>print('{name},{age}'.format_map({'name':'ZhangSan','age':40}))ZhangSan,40#字符串對(duì)象的方法也屬于可調(diào)用對(duì)象,可以作為map()函數(shù)的第一個(gè)參數(shù)>>>print(list(map(r'subdir\{}.txt'.format,range(5))))['subdir\\0.txt','subdir\\1.txt','subdir\\2.txt','subdir\\3.txt','subdir\\4.txt']6.1.3字符串格式化(3)格式化字符串字面值>>>width,height=8,6>>>print(f'Rectangleof{width}*{height}\nArea:{width*height}')Rectangleof8*6Area:48#下面大括號(hào)內(nèi)以等于號(hào)結(jié)束的語(yǔ)法只有Python3.8以上版本才支持>>>print(f'{width*height=}')width*height=48#低版本需要改成下面的形式>>>print(f'width*height={width*height}')width*height=48>>>print(f'{width=},{height=},Area={width*height}')width=8,height=6,Area=486.1.3字符串格式化#冒號(hào)后面是格式描述,左對(duì)齊,長(zhǎng)度為10,保留3位小數(shù)#最后的逗號(hào)是為了更清楚地觀察左對(duì)齊的效果>>>print(f'{width/height=:<10.3f},')width/height=1.333,#冒號(hào)后面的0表示填充符>>>print(f'{width/height=:0<10.3f}')width/height=1.33300000#小于號(hào)后面的0表示填充符,與上一行代碼功能等價(jià)>>>print(f'{width/height=:<010.3f}')width/height=1.33300000#冪運(yùn)算結(jié)果格式化為八進(jìn)制數(shù)>>>print(f'{width**height=:#o}')width**height=0o1000000#格式化為十六進(jìn)制數(shù)>>>print(f'{width**height=:#x}')width**height=0x400006.1.3字符串格式化>>>directory='subdir'#在字符串前面同時(shí)加f和r,位置可交換,也可以使用大寫字母F和R>>>files=[fr'{directory}\{i}.txt'foriinrange(5)]>>>print(files)['subdir\\0.txt','subdir\\1.txt','subdir\\2.txt','subdir\\3.txt','subdir\\4.txt']6.1.4find()、rfind()、index()、rindex()text='''Beautifulisbetterthanugly.Explicitisbetterthanimplicit.Simpleisbetterthancomplex.Complexisbetterthancomplicated.Flatisbetterthannested.Sparseisbetterthandense.Readabilitycounts.'''#這種賦值運(yùn)算符:=只有Python3.8以上版本才支持#使用find()和rfind()方法時(shí)應(yīng)檢查返回值是否為-1if(position:=text.find('ugly'))!=-1:print(position)else:print('不存在')6.1.4find()、rfind()、index()、rindex()#從下標(biāo)30往后查找if(position:=text.find('ugly',30))!=-1:print(position)else:print('不存在')if(position:=text.find('better'))!=-1:print(f'第一次出現(xiàn)位置:{position}')else:print('不存在')if(position:=text.rfind('better'))!=-1:print(f'最后一次出現(xiàn)位置:{position}')else:print('不存在')6.1.4find()、rfind()、index()、rindex()sub='ugly'#使用index()方法時(shí),建議結(jié)合選擇結(jié)構(gòu)和異常處理結(jié)構(gòu)#要么確保存在子串再使用ifsubintext:print(text.index(sub))else:print('不存在')#要么就捕捉并處理子串不存在時(shí)拋出的異常try:print(text.index(sub,30))except:print('不存在')6.1.4find()、rfind()、index()、rindex()例6-1編寫程序,查找并輸出字符串中除中文逗號(hào)、句號(hào)和換行符之外每個(gè)唯一字符及其第一次出現(xiàn)的位置。6.1.4find()、rfind()、index()、rindex()text='''東邊來(lái)個(gè)小朋友叫小松,手里拿著一捆蔥。西邊來(lái)個(gè)小朋友叫小叢,手里拿著小鬧鐘。小松手里蔥捆得松,掉在地上一些蔥。小叢忙放鬧鐘去拾蔥,幫助小松捆緊蔥。小松夸小叢像雷鋒,小叢說(shuō)小松愛勞動(dòng)。'''forindex,chinenumerate(text):#注意代碼中是中文逗號(hào)和句號(hào),逗號(hào)和句號(hào)后面沒有空格ifchnotin('\n,。')andindex==text.index(ch):print((index,ch),end='')6.1.5split()、rsplit()、splitlines()、join()text='''Beautifulisbetterthanugly.red\t\tgreenblueone,two,,three,,,four,,,,'''#切分為多行l(wèi)ines=text.splitlines()#不指定分隔符,默認(rèn)使用空白字符作分隔符進(jìn)行分隔,丟棄切分結(jié)果中的空字符串print(lines[0].split())print(lines[1].split())#使用空格作分隔符,相鄰空格之間會(huì)得到一個(gè)空字符串,并且不會(huì)被丟棄print(lines[1].split(''))#使用逗號(hào)作分隔符,相鄰空格之間會(huì)得到一個(gè)空字符串,并且不會(huì)被丟棄print(lines[2].split(','))#使用逗號(hào)連接多個(gè)字符串print(','.join(lines[1].split()))#使用冒號(hào)連接多個(gè)字符串print(':'.join(lines[1].split()))#先使用星號(hào)連接字符串得到'1*2*3*4*5*6*7',然后使用內(nèi)置函數(shù)eval()計(jì)算字符串的值,相當(dāng)于計(jì)算7的階乘print(eval('*'.join(map(str,range(1,8)))))#回車符、換行符以及回車換行符都會(huì)作為分隔符print('a\r\nb\nc\rd'.splitlines())6.1.6replace()、maketrans()、translate()text='''Beautifulisbetterthanugly.Explicitisbetterthanimplicit.Simpleisbetterthancomplex.Complexisbetterthancomplicated.Flatisbetterthannested.Sparseisbetterthandense.Readabilitycounts.'''#把所有小寫單詞better都替換為大寫單詞BETTERprint(text.replace('better','BETTER'),end='\n===\n')#只把前3個(gè)小寫單詞better替換為大寫單詞BETTERprint(text.replace('better','BETTER',3),end='\n===\n')#構(gòu)造映射表,P對(duì)應(yīng)@,y對(duì)應(yīng)#,t對(duì)應(yīng)$,h對(duì)應(yīng)%,o對(duì)應(yīng)&,n對(duì)應(yīng)*#可以通過(guò)str來(lái)調(diào)用maketrans()方法,也可以通過(guò)任意字符串來(lái)調(diào)用,結(jié)果一樣table=str.maketrans('Python','@#$%&*')#查看創(chuàng)建的映射表,語(yǔ)法適用于Python3.8以及更新版本#如果使用低版本,可以刪除大括號(hào)內(nèi)最后的等于號(hào)print(f'{table=}')#使用剛剛創(chuàng)建的映射表替換字符串中的字符print(text.translate(table),end='\n===\n')6.1.6replace()、maketrans()、translate()#構(gòu)造映射表,指定第三個(gè)參數(shù),把a(bǔ)、b、c、d都對(duì)應(yīng)到Nonetable=str.maketrans('Python','@#$%&*','abcd')print(f'{table=}')#映射表中對(duì)應(yīng)None的字符會(huì)被刪除,不在結(jié)果字符串中出現(xiàn)print(text.translate(table),end='\n===\n')#構(gòu)造阿拉伯?dāng)?shù)字和漢字?jǐn)?shù)字之間的映射表table=''.maketrans('0123456789','〇一二三四五六七八九')#把字符串中的阿拉伯?dāng)?shù)字替換為對(duì)應(yīng)的漢字?jǐn)?shù)字,返回新字符串print('2020年8月15日'.translate(table),end='\n===\n')6.1.6replace()、maketrans()、translate()#英文字母大小寫,也可以導(dǎo)入標(biāo)準(zhǔn)庫(kù)string使用預(yù)定義的常量,見6.2.1節(jié)lower_case='abcdefghijklmnopqrstuvwxyz'upper_case='ABCDEFGHIJKLMNOPQRSTUVWXYZ'#凱撒加密,把一段文本中每個(gè)英文字母替換為該字母在字母表中后面的第k個(gè)字母#英文字母大小寫各自首尾相接,z的下一個(gè)字母是a,Z的下一個(gè)字母是A#變量k的值會(huì)影響置換結(jié)果,可以修改為1-25之間的其他值,重新運(yùn)行并觀察結(jié)果k=3before=lower_case+upper_case#把前k個(gè)小寫字母放到最后,大寫字母也做同樣處理after=lower_case[k:]+lower_case[:k]+upper_case[k:]+upper_case[:k]#構(gòu)造映射表,定義置換關(guān)系table=''.maketrans(before,after)#替換字符串中的字符print(text.translate(table))6.1.7center()、ljust()、rjust()>>>text='MainMenu'#居中,3小于原字符串長(zhǎng)度,直接返回原字符串#15大于原字符串長(zhǎng)度,如果不指定參數(shù)fillchar,默認(rèn)使用空格填充#如果指定了參數(shù)fillchar,就使用指定的字符填充兩邊的空白>>>print((text.center(3),text.center(15),text.center(15,'=')))('MainMenu','MainMenu','===MainMenu===')#原字符串居左、居右>>>print((text.ljust(15,'#'),text.rjust(15,'=')))('MainMenu######','======MainMenu')6.1.8字符串測(cè)試fromosimportlistdirfromkeywordimportiskeyword#變量名不能以數(shù)字開頭print(f"{'3name'.isidentifier()=}")print(f"{'name3'.isidentifier()=}")#測(cè)試字符串是否為關(guān)鍵字print(f"{iskeyword('def')=}")#isidentifier()方法只根據(jù)形式進(jìn)行判斷,并不準(zhǔn)確print(f"{'def'.isidentifier()=}")#測(cè)試大小寫時(shí)會(huì)忽略非字母字符print(f"{'123abc'.islower()=}")print(f"{'123ABC'.isupper()=}")6.1.8字符串測(cè)試#islower()方法要求字符串中有字母,否則都是返回Falseprint(f"{''.islower()=}")print(f"{''.isupper()=}")print(f"{'666'.islower()=}")print(f"{'666'.isupper()=}")#遍歷C:\Windows文件夾中所有文件和子文件夾forfninlistdir(r'C:\Windows'):#檢查是否以字母n開頭并且以.txt或.exe二者之一結(jié)束iffn.startswith('n')andfn.endswith(('.txt','.exe')):print(fn)6.1.9strip()、rstrip()、lstrip()、removeprefix()、removesuffix()text='BeautifulisBETTERthanugly.\n\r\t'print((text.strip(),#刪除兩側(cè)所有空白字符text.rstrip(),#刪除右側(cè)所有空白字符text.lstrip(),#刪除左側(cè)所有空白字符#刪除兩側(cè)的指定字符,雖然指定的字符在原字符串中都有,但不在最外邊,所以沒有被刪除text.strip('B.guyl'),#左側(cè)刪除空格之后,B是最外層的字符,繼續(xù)刪除#右側(cè)最外層的\t不在要?jiǎng)h除的字符之中,保持不變text.strip('B.guyl'),#右側(cè)最外層的\t是要?jiǎng)h除的字符之一,刪除,\r變?yōu)樽钔鈱幼址?\r也是要?jiǎng)h除的字符,繼續(xù)刪除,\n變?yōu)樽钔鈱幼址琝n也是要?jiǎng)h除的字符,繼續(xù)刪除,以此類推text.rstrip('B.\rgu\nyl\t'),))#刪除兩側(cè)的所有空白字符,返回新字符串text=text.strip()print((text.removeprefix('Bea'),#刪除指定的前綴text.removesuffix('ly.'),#刪除指定的后綴text.removesuffix('ly')))#指定的字符串不是后綴,返回原字符串6.2部分標(biāo)準(zhǔn)庫(kù)對(duì)字符串的處理-6.2.1標(biāo)準(zhǔn)庫(kù)string標(biāo)準(zhǔn)庫(kù)string中提供了常用的一些字符串常量,例如ascii_lowercase(包含所有小寫英文字母的字符串'abcdefghijklmnopqrstuvwxyz')、ascii_uppercase(包含所有大寫英文字母的字符串'ABCDEFGHIJKLMNOPQRSTUVWXYZ')、ascii_letters(包含所有小寫和大寫英文字母的字符串)、digits(包含所有阿拉伯?dāng)?shù)字的字符串'0123456789')、hexdigits(字符串'0123456789abcdefABCDEF')、octdigits(字符串'01234567')、punctuation(包含標(biāo)點(diǎn)符號(hào)的字符串:'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~')、whitespace(包含所有空白字符的字符串'\t\n\r\x0b\x0c')、printable(包含字母、數(shù)字、標(biāo)點(diǎn)符號(hào)、空白字符等所有可打印字符的字符串)。6.2.1標(biāo)準(zhǔn)庫(kù)string例6-2編寫程序,生成10個(gè)隨機(jī)電子郵箱地址,格式為username@domain.suffix,要求用戶名username為長(zhǎng)度介于3到10的字符串并且只包含英文字母、阿拉伯?dāng)?shù)字和下畫線,域名domain為長(zhǎng)度介于3到8的字符串并且只包含英文字母,域名后綴suffix為.net、.com、.cn這三者之一。6.2.1標(biāo)準(zhǔn)庫(kù)stringfromstringimportascii_letters,digitsfromrandomimportrandint,choices,choicecharaters=ascii_letters+digits+'_'for_inrange(10):username=''.join(choices(charaters,k=randint(3,10)))domain=''.join(choices(ascii_letters,k=randint(3,8)))suffix=choice(('.net','.com','.cn'))print(f'{username}@{domain}{suffix}')6.2.1標(biāo)準(zhǔn)庫(kù)string例6-3編寫程序,輸入一個(gè)正整數(shù)n,然后輸出所有可能的n位密碼字符串,要求每個(gè)密碼字符只能是英文字母、數(shù)字、下畫線、英文逗號(hào)或英文句號(hào)。6.2.1標(biāo)準(zhǔn)庫(kù)stringfromitertoolsimportpermutationsfromstringimportascii_letters,digitsn=int(input('請(qǐng)輸入密碼長(zhǎng)度:'))characters=ascii_letters+digits+'_,.'foriteminpermutations(characters,n):print(''.join(item))6.2.2標(biāo)準(zhǔn)庫(kù)zlib與數(shù)據(jù)壓縮Python標(biāo)準(zhǔn)庫(kù)zlib中的compress(data,/,level=-1)和decompress(data,/,wbits=15,bufsize=16384)函數(shù)可以實(shí)現(xiàn)數(shù)據(jù)壓縮和解壓縮,要求參數(shù)為字節(jié)串。字符串需要首先使用encode()方法進(jìn)行編碼,其他類型數(shù)據(jù)可以使用標(biāo)準(zhǔn)庫(kù)pickle中的dumps()函數(shù)轉(zhuǎn)換為字節(jié)串,與之對(duì)應(yīng)的函數(shù)loads()用來(lái)把字節(jié)串還原為原來(lái)的Python對(duì)象,在這兩個(gè)函數(shù)調(diào)用之間可以使用標(biāo)準(zhǔn)庫(kù)zlib的compress()和decompress()函數(shù)進(jìn)行壓縮和解壓縮。6.2.2標(biāo)準(zhǔn)庫(kù)zlib與數(shù)據(jù)壓縮fromzlibimportcompress,decompressfrompickleimportdumps,loads#數(shù)據(jù)中重復(fù)越多,可壓縮的空間越大,壓縮前后的字節(jié)串長(zhǎng)度相差越大texts=['《Python程序設(shè)計(jì)入門與實(shí)踐教程》,董付國(guó)編著','這句話里有重復(fù)重復(fù)重復(fù)重復(fù)重復(fù)重復(fù)的信息','贊'*32,]forencodingin('utf8','gbk'):print(encoding,end='=====\n')fortextintexts:#對(duì)字符串使用指定的編碼格式編碼為字節(jié)串bytes_text=text.encode(encoding)#對(duì)字節(jié)串進(jìn)行壓縮compressed_text=compress(bytes_text)#第一個(gè)輸出表示壓縮后再解壓縮是否能夠得到原來(lái)的數(shù)據(jù)#第二個(gè)輸出表示壓縮前的字節(jié)串長(zhǎng)度,第三個(gè)輸出表示壓縮后的字節(jié)串長(zhǎng)度print(decompress(compressed_text).decode(encoding)==text,len(bytes_text),len(compressed_text),sep=',')6.2.2標(biāo)準(zhǔn)庫(kù)zlib與數(shù)據(jù)壓縮#數(shù)據(jù)中重復(fù)越多,可壓縮的空間越大,壓縮前后的字節(jié)串長(zhǎng)度相差越大data=[[1,2,3,4,5],[3,3,3,3,3,3,3,3],[666666]*50]foritemindata:print('='*5)#把Python對(duì)象轉(zhuǎn)換為字節(jié)串bytes_item=dumps(item)#壓縮字節(jié)串compressed_item=compress(bytes_item)#第一個(gè)輸出表示壓縮后再解壓縮是否能夠得到原來(lái)的數(shù)據(jù)#第二個(gè)輸出表示壓縮前的字節(jié)串長(zhǎng)度,第三個(gè)輸出表示壓縮后的字節(jié)串長(zhǎng)度print(loads(decompress(compressed_item))==item,len(bytes_item),len(compressed_item),sep=',')6.2.3標(biāo)準(zhǔn)庫(kù)json與序列化JSON是一種輕量級(jí)數(shù)據(jù)交換格式,Python標(biāo)準(zhǔn)庫(kù)json提供了相關(guān)的支持,dumps()函數(shù)可以把Python對(duì)象轉(zhuǎn)換為JSON格式的字符串,loads()函數(shù)用來(lái)把字符串還原為原來(lái)的數(shù)據(jù)。6.2.3標(biāo)準(zhǔn)庫(kù)json與序列化dumps()函數(shù)的完整語(yǔ)法為dumps(obj,*,skipkeys=False,ensure_ascii=True,check_circular=True,allow_nan=True,cls=None,indent=None,separators=None,default=None,sort_keys=False,**kw)常用的參數(shù)有:1)skipkeys值為True時(shí)如果字典的“鍵”不是字符串、整數(shù)、實(shí)數(shù)、布爾值、空值就自動(dòng)忽略;2)ensure_ascii值為False時(shí)不會(huì)對(duì)非ASCII碼字母進(jìn)行轉(zhuǎn)換,值為True時(shí)會(huì)把所有數(shù)據(jù)都轉(zhuǎn)換為JSON字符串,一般是Unicode轉(zhuǎn)義字符;3)separators用來(lái)指定轉(zhuǎn)換結(jié)果字符串中使用的分隔符,默認(rèn)為元組(',',':'),分別指定元素之間的分隔符和字典“鍵”與“值”之間的分隔符;4)sort_keys值為True時(shí)轉(zhuǎn)換結(jié)果按字典的“鍵”進(jìn)行排序。6.2.3標(biāo)準(zhǔn)庫(kù)json與序列化loads()函數(shù)的語(yǔ)法如下,第一個(gè)參數(shù)表示要還原或反序列化的字符串,其他參數(shù)大多數(shù)情況下使用默認(rèn)值即可,暫時(shí)可不關(guān)心。loads(s,*,cls=None,object_hook=None,parse_float=None,parse_int=None,parse_constant=None,object_pairs_hook=None,**kw)6.2.3標(biāo)準(zhǔn)庫(kù)json與序列化fromjsonimportdumps,loads#對(duì)列表和元組進(jìn)行編碼print((dumps([1,2,3,4]),dumps((1,2,3,4))))#不能直接對(duì)集合進(jìn)行轉(zhuǎn)換,可以先轉(zhuǎn)換為字符串#以元組形式進(jìn)行輸出,是為了便于觀察字符串#否則的話直接輸出轉(zhuǎn)換結(jié)果字符串會(huì)不顯示兩側(cè)的引號(hào)print((dumps(str({1,2,3,4})),))print(eval(loads(dumps(str({1,2,3,4})))))#對(duì)字典進(jìn)行編碼print(dumps({'c':99,'a':97,'b':98,'d':100}))#按照“鍵”進(jìn)行排序print(dumps({'c':99,'a':97,'b':98,'d':100},sort_keys=True))6.2.3標(biāo)準(zhǔn)庫(kù)json與序列化#指定分隔符,逗號(hào)和冒號(hào)后面沒有空格,可以壓縮空間print(dumps({'c':99,'a':97,'b':98,'d':100},separators=(',',':')))#指定縮進(jìn)的空格數(shù)量print(dumps({'c':99,'a':97,'b':98,'d':100},indent=4))print(loads(dumps({'c':99,'a':97,'b':98,'d':100},indent=4)))#默認(rèn)情況下會(huì)把漢字轉(zhuǎn)換成Unicode轉(zhuǎn)義字符print(dumps({'紅色':(1,0,0),'綠色':(0,1,0),'藍(lán)色':(0,0,1)}))#加參數(shù)ensure_ascii=False后不對(duì)非ASCII碼字符進(jìn)行轉(zhuǎn)換print(dumps({'紅色':(1,0,0),'綠色':(0,1,0),'藍(lán)色':(0,0,1)},ensure_ascii=False))6.3部分?jǐn)U展庫(kù)對(duì)字符串的處理-6.3.1中英文分詞分詞是指把長(zhǎng)文本切分成若干單詞或詞組的過(guò)程。在文本情感分析、文本分類、垃圾郵件判斷等自然語(yǔ)言處理領(lǐng)域經(jīng)常需要對(duì)文字進(jìn)行分詞,分詞的準(zhǔn)確度直接影響了后續(xù)文本處理和挖掘算法的最終效果。Python擴(kuò)展庫(kù)jieba可以用于中英文分詞,支持精確模式、全模式、搜索引擎模式等分詞模式,支持繁體分詞,支持自定義詞典。除了用于分詞,擴(kuò)展庫(kù)jieba還可以根據(jù)詞頻提取關(guān)鍵字用于文本分類以及其他處理。6.3.1中英文分詞>>>importjieba>>>text='Python之禪中有句話非常重要,Readabilitycounts.'>>>jieba.lcut(text)#lcut()函數(shù)返回分詞后的列表['Python','之禪','中','有','句','話','非常','重要',',','Readability','','counts','.']>>>jieba.lcut('花紙杯')['花','紙杯']>>>jieba.add_word('花紙杯')#增加一個(gè)詞條>>>jieba.lcut('花紙杯')['花紙杯']6.3.1中英文分詞>>>text='在文本情感分析、文本分類、垃圾郵件判斷等自然語(yǔ)言處理領(lǐng)域經(jīng)常需要對(duì)文字進(jìn)行分詞,分詞的準(zhǔn)確度直接影響了后續(xù)文本處理和挖掘算法的最終效果。'>>>print(jieba.lcut(text))#分詞['在','文本','情感','分析','、','文本','分類','、','垃圾郵件','判斷','等','自然語(yǔ)言','處理','領(lǐng)域','經(jīng)常','需要','對(duì)','文字','進(jìn)行','分詞',',','分詞','的','準(zhǔn)確度','直接','影響','了','后續(xù)','文本處理','和','挖掘','算法','的','最終','效果','。']>>>importjieba.analyse#使用TF-IDF算法提取關(guān)鍵詞,默認(rèn)返回20個(gè)>>>jieba.analyse.extract_tags(text)['分詞','文本','文本處理','垃圾郵件','自然語(yǔ)言','準(zhǔn)確度','算法','情感','后續(xù)','挖掘','分類','文字','效果','經(jīng)常','判斷','領(lǐng)域','處理','最終','分析','直接']6.3.1中英文分詞#提取前10個(gè)最重要的關(guān)鍵詞及其重要程度,數(shù)值越大表示越重要>>>jieba.analyse.extract_tags(text,topK=10,withWeight=True)[('分詞',0.9362762459680001),('文本',0.7155880475495999),('文本處理',0.49164958958),('垃圾郵件',0.460111295168),('自然語(yǔ)言',0.417397669968),('準(zhǔn)確度',0.3964677442164),('算法',0.3476476599652),('情感',0.2980082891932),('后續(xù)',0.29197790133),('挖掘',0.2886426369724)]#使用TextRank算法提取最重要的前10個(gè)關(guān)鍵詞,同時(shí)顯示其重要程度>>>jieba.analyse.textrank(text,topK=10,withWeight=True)[('分詞',1.0),('文本',0.8965387193718527),('后續(xù)',0.6156540426617422),('算法',0.5438724915841351),('挖掘',0.5398717803075287),('需要',0.5337964887358811),('判斷',0.5315533212676871),('分類',0.5206961193726398),('文字',0.5194648203713825),('文本處理',0.514501382869386)]6.3.1中英文分詞#分詞,并查看詞性#其中'n'表示普通名詞,'nr'表示人名,'s'表示處所名詞,'v'表示普通動(dòng)詞#'uz'、'u'、'uj'表示助詞,'m'表示數(shù)量詞,詳見/fxsjy/jieba#結(jié)果僅供參考,并不是特別準(zhǔn)確>>>importjieba.posseg>>>jieba.posseg.lcut('公交車上小明手里拿著一本董老師的書在看')[pair('公交車','n'),pair('上小明','nr'),pair('手里','s'),pair('拿','v'),pair('著','uz'),pair('一本','m'),pair('董','nr'),pair('老師','n'),pair('的','uj'),pair('書','n'),pair('在看','u')]6.3.2中文拼音處理>>>frompypinyinimportlazy_pinyin,pinyin>>>print(lazy_pinyin('董付國(guó)'))#返回拼音['dong','fu','guo']>>>print(lazy_pinyin('董付國(guó)',1))#帶聲調(diào)的拼音['dǒng','fù','guó']>>>print(lazy_pinyin('董付國(guó)',2))#另一種拼音形式,數(shù)字表示前面字母的聲調(diào)['do3ng','fu4','guo2']>>>print(lazy_pinyin('董付國(guó)',3))#只返回拼音首字母['d','f','g']>>>print(lazy_pinyin('重要',1))#能夠根據(jù)詞組智能識(shí)別多音字['zhòng','yào']>>>print(lazy_pinyin('重陽(yáng)',1))['chóng','yáng']>>>print(pinyin('重陽(yáng)'))#返回拼音[['chóng'],['yáng']]>>>print(pinyin('重陽(yáng)節(jié)',heteronym=True))#返回多音字的所有讀音[['chóng'],['yáng'],['jié','jiē']]6.3.2中文拼音處理>>>sentence='我們正在學(xué)習(xí)董付國(guó)老師的Pyhon教材'>>>print(lazy_pinyin(sentence))['wo','men','zheng','zai','xue','xi','dong','fu','guo','lao','shi','de','Pyhon','jiao','cai']>>>lazy_pinyin(sentence,1)['wǒ','men','zhèng','zài','xué','xí','dǒng','fù','guó','lǎo','shī','de','Pyhon','jiào','cái']>>>sentence='山東煙臺(tái)的大櫻桃真好吃啊'>>>print(sorted(sentence,key=lambdach:lazy_pinyin(ch)))#按拼音對(duì)漢字進(jìn)行排序['啊','吃','大','的','東','好','山','臺(tái)','桃','煙','櫻','真']6.3.3繁體中文與簡(jiǎn)體中文的互相轉(zhuǎn)換fromlangconvimportConverterdefconvert(text,flag=0):'''text:要轉(zhuǎn)換的文本,flag=0表示簡(jiǎn)轉(zhuǎn)繁,flag=1表示繁轉(zhuǎn)簡(jiǎn)'''rule='zh-hans'ifflagelse'zh-hant'returnConverter(rule).convert(text)text='繁體中文與簡(jiǎn)體中文的互相轉(zhuǎn)換,Python程序設(shè)計(jì)入門與實(shí)踐教程,董付國(guó)'print(convert(text))text='繁體中文與簡(jiǎn)體中文的互相轉(zhuǎn)換,Python程序設(shè)計(jì)入門與實(shí)踐教程,董付國(guó)'print(convert(text,1))6.4綜合例題解析例6-4編寫程序,輸入一個(gè)任意中文字符串,進(jìn)行分詞,然后把長(zhǎng)度為2的詞語(yǔ)中的兩個(gè)字交換順序,再把這些詞語(yǔ)按原來(lái)的順序連接起來(lái),輸出連接之后的字符串。6.4綜合例題解析fromjiebaimportcutdefswap(word):'''交換

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論