Python編程從入門(mén)到實(shí)戰(zhàn)-輕松過(guò)二級(jí) (思政版)(第2版) 課件 余青松 第6-12章 輸入、輸出和文件處理-Python計(jì)算生態(tài)_第1頁(yè)
Python編程從入門(mén)到實(shí)戰(zhàn)-輕松過(guò)二級(jí) (思政版)(第2版) 課件 余青松 第6-12章 輸入、輸出和文件處理-Python計(jì)算生態(tài)_第2頁(yè)
Python編程從入門(mén)到實(shí)戰(zhàn)-輕松過(guò)二級(jí) (思政版)(第2版) 課件 余青松 第6-12章 輸入、輸出和文件處理-Python計(jì)算生態(tài)_第3頁(yè)
Python編程從入門(mén)到實(shí)戰(zhàn)-輕松過(guò)二級(jí) (思政版)(第2版) 課件 余青松 第6-12章 輸入、輸出和文件處理-Python計(jì)算生態(tài)_第4頁(yè)
Python編程從入門(mén)到實(shí)戰(zhàn)-輕松過(guò)二級(jí) (思政版)(第2版) 課件 余青松 第6-12章 輸入、輸出和文件處理-Python計(jì)算生態(tài)_第5頁(yè)
已閱讀5頁(yè),還剩258頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第二版本章要點(diǎn):6.1輸入和輸出概述6.2命令行參數(shù)6.3標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出函數(shù)6.4文件和文件對(duì)象6.5文本文件的讀取和寫(xiě)入6.6CSV格式文件的讀取和寫(xiě)入第6章輸入、輸出和文件處理本章要點(diǎn):6.7JSON格式文件的讀取和寫(xiě)入6.8隨機(jī)文件的讀取和寫(xiě)入6.9os模塊和文件目錄操作6.10綜合應(yīng)用:文件數(shù)據(jù)的統(tǒng)計(jì)和分析第6章輸入和輸出概述6.1輸入和輸出概述Python程序通??梢允褂孟铝蟹绞街粚?shí)現(xiàn)交互功能:輸入輸出程序處理圖6-1程序的輸入和輸出示意圖(1)命令行參數(shù)。(2)標(biāo)準(zhǔn)輸入和輸出函數(shù)。(3)文件輸入和輸出。(4)圖形化用戶(hù)界面6.2命令行參數(shù)通過(guò)列表sys.argv訪問(wèn)命令行參數(shù)argv[0]為Python腳本名,argv[1]為第1個(gè)參數(shù),argv[2]為第2個(gè)參數(shù)【例6.1】命令行參數(shù)示例(hello_argv.py)。在操作系統(tǒng)命令行界面運(yùn)行Python程序時(shí),根據(jù)所指定的命令行參數(shù),顯示輸出相應(yīng)的Hello信息importsysprint('Hello,'+sys.argv[1])命令行參數(shù)類(lèi)型轉(zhuǎn)換按慣例,命令行輸入?yún)?shù)argv[1]、argv[2]等為字符串,所以如果希望傳入的參數(shù)為數(shù)值,則需要使用轉(zhuǎn)換函數(shù)int()或者float()將字符串轉(zhuǎn)換為適合的類(lèi)型【例6.2】命令行參數(shù)示例(randomseq.py):生成n個(gè)隨機(jī)數(shù),其中,n由程序的第一個(gè)命令行參數(shù)所確定importsys,randomn=int(sys.argv[1])foriinrange(n):print(random.randrange(0,100))6.3標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出函數(shù)input函數(shù)的格式print函數(shù)的格式print函數(shù)用于打印一行內(nèi)容,即將多個(gè)以分隔符(sep,默認(rèn)為空格)分隔的值(value,...,以逗號(hào)分隔的值),寫(xiě)入到指定文件流(file,默認(rèn)為控制臺(tái)sys.stdout)。參數(shù)end指定換行符;flush指定是否強(qiáng)制寫(xiě)入到流【6.3】輸入函數(shù)和輸出函數(shù)示例1>>>print(1,2,3)#輸出時(shí)采用默認(rèn)分隔符(空格)。輸出:123123>>>print(1,2,3,sep=',')#輸出時(shí)采用逗號(hào)(,)分隔符。輸出:1,2,31,2,3>>>print(1,2,3,sep=',',end='.\n')#輸出時(shí)采用逗號(hào)分隔符,最后以點(diǎn)結(jié)束并換行1,2,3.>>>foriinrange(5):#輸出時(shí)使用空格代替換行符

print(i,end='')01234【例6.4】輸入函數(shù)和輸出函數(shù)示例2(io_test2.py)importdatetimesName=input("請(qǐng)輸入您的姓名:")#輸入姓名birthyear=int(input("請(qǐng)輸入您的出生年份:"))#輸入出生年份age=datetime.date.today().year-birthyear#根據(jù)當(dāng)前年份和出生年份計(jì)算年齡print("您好!{0}。您{1}歲。".format(sName,age))【例6.5】從控制臺(tái)讀取n個(gè)整數(shù)并計(jì)算其累計(jì)和(io_sum.py)n由程序的第一個(gè)命令行參數(shù)所確定importsysn=int(sys.argv[1])#命令行第一個(gè)參數(shù)確認(rèn)所需求和的整數(shù)個(gè)數(shù)ntotal=0#設(shè)置求和初始值=0foriinrange(n):number=int(input('請(qǐng)輸入整數(shù):'))#輸入整數(shù)total+=number#整數(shù)累加print('累計(jì)和為:’,total)#輸出n個(gè)整數(shù)累計(jì)和交互式用戶(hù)輸入【例6.6】編寫(xiě)程序(stat.py),輸入批量數(shù)據(jù)(假定當(dāng)輸入-1時(shí),終止輸入),統(tǒng)計(jì)所輸入的數(shù)據(jù)個(gè)數(shù),并求總和以及平均值a=[]#初始化列表x=float(input("請(qǐng)輸入一個(gè)實(shí)數(shù),輸入-1終止:"))whilex!=-1:a.append(x)#將所輸入的實(shí)數(shù)添加到列表中x=float(input("請(qǐng)輸入一個(gè)實(shí)數(shù),輸入-1終止:"))print("計(jì)數(shù):",len(a))#列表長(zhǎng)度即為實(shí)數(shù)個(gè)數(shù)print("求和:",sum(a))#列表中各元素求和print("平均值:",sum(a)/len(a))#列表中各元素求平均值6.4文件和文件對(duì)象文件對(duì)象和open函數(shù)使用open()函數(shù)時(shí),可以指定打開(kāi)文件的模式mode為:'r'(只讀)、'w'(寫(xiě)入,寫(xiě)入前刪除舊內(nèi)容)、'x'(創(chuàng)建新文件,如果文件存在,則導(dǎo)致FileExistsError)、'a'(追加)、'b'(二進(jìn)制文件)、't'(文本文件,默認(rèn)值)、'+'(更新,讀寫(xiě))文件的打開(kāi)、寫(xiě)入、讀取和關(guān)閉通過(guò)內(nèi)置函數(shù)open()可創(chuàng)建或打開(kāi)文件對(duì)象通過(guò)文件對(duì)象的實(shí)例方法write/writelines,可以寫(xiě)入字符串到文本文件通過(guò)文件對(duì)象的實(shí)例方法read/readline,可以讀取文本文件的內(nèi)容文件讀寫(xiě)完成后,應(yīng)該使用close方法關(guān)閉文件【例6.7】讀取并輸出文本文件(type_file.py)

importsysfilename=sys.argv[0]#所讀取并輸出的就是本程序文件type_file.pyf=open(filename,'r',encoding='utf8')#打開(kāi)文件line_no=0#統(tǒng)計(jì)行號(hào)whileTrue:line_no+=1#行號(hào)計(jì)數(shù)line=f.readline()#讀取行信息ifline:print(line_no,":",line)#輸出行號(hào)和該行內(nèi)容else:breakf.close()#關(guān)閉打開(kāi)的文件with語(yǔ)句和上下文管理協(xié)議實(shí)現(xiàn)上下文管理協(xié)議的對(duì)象文件對(duì)象支持使用with語(yǔ)句,確保打開(kāi)的文件自動(dòng)關(guān)閉importsysfilename=sys.argv[0]#所讀取并輸出的就是本程序文件type_file_with.pyline_no=0#統(tǒng)計(jì)行號(hào)withopen(filename,'r',encoding='utf8')asf:#使用with語(yǔ)句實(shí)現(xiàn)上下文管理協(xié)議forlineinf:line_no+=1#行號(hào)計(jì)數(shù)print(line_no,":",line)#輸出行號(hào)和該行內(nèi)容f.close()#可以省略【例6.8】利用with語(yǔ)句讀取并輸出文本文件(type_file_with.py)6.5文本文件的讀取和寫(xiě)入在使用open()函數(shù)打開(kāi)或創(chuàng)建一個(gè)文件時(shí),其默認(rèn)的打開(kāi)模式為只讀文本文件。文本文件用于儲(chǔ)存文本字符串,默認(rèn)編碼為Unicode存儲(chǔ)在文本文件中的數(shù)據(jù)也可以是結(jié)構(gòu)化數(shù)據(jù),例如一維數(shù)據(jù)或者二維數(shù)據(jù)一般地,結(jié)構(gòu)化數(shù)據(jù)文件的存儲(chǔ)通常使用特殊分隔符,例如空格分隔、逗號(hào)分隔(CSV,Comma-SeparatedValues)、制表符分隔(TSV,Tab-SeparatedValues)、換行分隔,或者其他分隔符分隔一維數(shù)據(jù)文件通常存儲(chǔ)同一個(gè)維度的多個(gè)數(shù)據(jù)處理一維數(shù)據(jù)文件的方式是首先讀取文本文件內(nèi)容,然后使用字符串的split方法拆分各字段內(nèi)容二維數(shù)據(jù)文件通常存儲(chǔ)兩個(gè)維度的數(shù)據(jù),每一行表示一條記錄的多個(gè)字段處理二維數(shù)據(jù)文件的方式是首先讀取文本文件內(nèi)容,然后分別處理各行文本。用戶(hù)可以使用字符串的split方法拆分各字段內(nèi)容。但更有效的方法是針對(duì)特定的格式,使用CSV或JSON模塊提供的函數(shù)直接進(jìn)行處理文本文件的寫(xiě)入打開(kāi)文件、寫(xiě)入數(shù)據(jù)和關(guān)閉文件1.創(chuàng)建或打開(kāi)文件對(duì)象通過(guò)內(nèi)置函數(shù)open()可以創(chuàng)建或打開(kāi)文件對(duì)象,可以指定覆蓋模式(文件存在時(shí))、編碼和緩存大小2.寫(xiě)入字符串到文本文件打開(kāi)文件后,可以使用其實(shí)例方法write()/writelines(),寫(xiě)入字符串到文本文件。可以使用實(shí)例方法flush強(qiáng)制把緩沖的數(shù)據(jù)更新到文件中f.write(s)#把字符串s寫(xiě)入到文件ff.writelines(lines)#依次把列表lines中的各字符串寫(xiě)入到文件ff.flush()#把緩沖的數(shù)據(jù)更新到文件中3.關(guān)閉文件寫(xiě)入文件完成后,應(yīng)該使用close方法關(guān)閉流,以釋放資源,并把緩沖的數(shù)據(jù)更新到文件中f.close()#關(guān)閉文件【例6.9】文本文件的寫(xiě)入示例(textwrite.py)withopen(r'c:\pythonb\data1.txt','w')asf:f.write('123\n')#寫(xiě)入字符串f.write('abc\n')#寫(xiě)入字符串f.writelines(['456\n','def\n'])#寫(xiě)入字符串文本文件的讀取打開(kāi)文件、讀取數(shù)據(jù)和關(guān)閉文件1.打開(kāi)文件對(duì)象通過(guò)內(nèi)置函數(shù)open()可以打開(kāi)文件對(duì)象??梢灾付ň幋a和緩存大小。例如:f1=open('data1.txt','r')#打開(kāi)data1.txt,若文件不存在,則導(dǎo)致FileNotFoundError2.從打開(kāi)的文本文件中讀取字符數(shù)據(jù)打開(kāi)文件后,可以使用下列實(shí)例方法讀取字符數(shù)據(jù)。f.read():從f中讀取剩余內(nèi)容直至文件結(jié)尾,返回一個(gè)字符串。f.read(n):從f中讀取至多n個(gè)字符,返回一個(gè)字符串;如果n為負(fù)數(shù)或None,讀取直至文件結(jié)尾。f.readline():從f中讀取1行內(nèi)容,返回一個(gè)字符串。f.readlines():從f中讀取剩余多行內(nèi)容,返回一個(gè)列表。3.關(guān)閉文件可以使用close方法關(guān)閉流,以釋放資源。通常采用with語(yǔ)句,以保證系統(tǒng)自動(dòng)關(guān)閉打開(kāi)的流【例6.10】文本文件的讀取示例withopen(r'c:\pythonb\data1.txt','r')asf:forsinf.readlines():print(s,end='')文本文件的編碼文本文件用于存儲(chǔ)編碼的字符串,使用open()函數(shù)打開(kāi)文本文件時(shí),可以指定所使用的編碼,函數(shù)形式如下Python內(nèi)置的編碼包括utf-8、utf8、latin-1、latin1、iso-8859-1、mbcs(僅Windows系統(tǒng))、ascii、utf-16、utf-32等>>>f=open("1.txt",mode="w",encoding="utf-8")逗號(hào)分隔符文本格式csv.reader對(duì)象和csv文件的讀取。本節(jié)基于以下scores.csv文件,其內(nèi)容為:6.6CSV文件格式的讀取和寫(xiě)入(1)學(xué)號(hào),姓名,性別,班級(jí),語(yǔ)文,數(shù)學(xué),英語(yǔ)102111,宋頤園,男,一班,72,85,82102113,王二丫,女,一班,75,82,51102131,董再永,男,三班,55,74,79102121,陳香燕,女,二班,80,86,68102135,周一萍,女,三班,72,76,72【例16.11】使用reader對(duì)象讀取csv文件importcsvdefreadcsv1(csvfilepath):withopen(csvfilepath,newline='')asf:#打開(kāi)文件f_csv=csv.reader(f)#創(chuàng)建csv.reader對(duì)象headers=next(f_csv)#標(biāo)題print(headers)#打印標(biāo)題(列表)forrowinf_csv:#循環(huán)打印各行(列表)print(row)if__name__=='__main__':readcsv1(r'scores.csv')CSV文件格式的讀取和寫(xiě)入(2)csv.writer對(duì)象和csv文件的寫(xiě)入【例16.12】使用writer對(duì)象寫(xiě)入csv文件importcsvdefwritecsv1(csvfilepath):headers=['學(xué)號(hào)','姓名','性別','班級(jí)','語(yǔ)文','數(shù)學(xué)','英語(yǔ)']rows=[('102111','宋頤園','男','一班','72','85','82'),('102113','王二丫','女','一班','75','82','51')]withopen(csvfilepath,'w',newline='')asf:#打開(kāi)文件

f_csv=csv.writer(f)#創(chuàng)建csv.writer對(duì)象

f_csv.writerow(headers)#寫(xiě)入1行(標(biāo)題)

f_csv.writerows(rows)#寫(xiě)入多行(數(shù)據(jù))if__name__=='__main__':writecsv1(r'scores1.csv')6.7JSON格式文件的讀取和寫(xiě)入JSON(JavaScriptObjectNotation,JavaScript對(duì)象標(biāo)記)定義了一種標(biāo)準(zhǔn)格式,用字符串來(lái)描述典型的內(nèi)置對(duì)象(如字典、列表、數(shù)字和字符串)。雖然JSON原來(lái)是JavaScript編程語(yǔ)言的一個(gè)子集,但它現(xiàn)在是一個(gè)獨(dú)立于語(yǔ)言的數(shù)據(jù)格式,所有主流編程語(yǔ)言都有生產(chǎn)和消費(fèi)的JSON數(shù)據(jù)的庫(kù)JSON是網(wǎng)絡(luò)數(shù)據(jù)交換的流行格式之一Python標(biāo)準(zhǔn)庫(kù)模塊json包含將Python對(duì)象編碼為JSON格式(簡(jiǎn)稱(chēng)JSON)和將JSON解碼到Python對(duì)象的函數(shù):dumps(obj):返回把obj對(duì)象序列化為JSON字符串。dump(obj,fp):把obj對(duì)象序列化為JSON字符串寫(xiě)入到文件fp。loads(s):返回把JSON字符串s反序列化后的對(duì)象。load(fp):返回把從文件fp中讀取JSON字符串反序列化后的對(duì)象。>>>importjson>>>data=[{'a':'A','b':(2,4),'c':3.0}]>>>str_json=json.dumps(data)>>>str_json#輸出:'[{"a":"A","c":3.0,"b":[2,4]}]'>>>data1=json.loads(str_json)>>>data1#輸出:[{'a':'A','c':3.0,'b':[2,4]}]JSON文件的寫(xiě)入和讀取【例6.13】JSON文件的寫(xiě)入(對(duì)象JSON格式系列化)(json_dump.py)importjsonurls={'baidu':'/','sina':'/','tencent':'/','taobao':'/'}withopen(r'c:\pythonb\data.json','w')asf:json.dump(urls,f)【例6.14】JSON文件的讀?。▽?duì)象JSON格式反系列化)(json_load.py)importjsonwithopen(r'c:\pythonb\data.json','r')asf:urls=json.load(f)print(urls)6.8隨機(jī)文件的讀取和寫(xiě)入創(chuàng)建或打開(kāi)隨機(jī)文件使用內(nèi)置函數(shù)open(),指定打開(kāi)模式'+‘定位使用其實(shí)例方法seek進(jìn)行定位寫(xiě)入/讀取數(shù)據(jù)使用其實(shí)例方法write/read關(guān)閉文件使用close方法關(guān)閉流,以釋放資源【例6.15】隨機(jī)文件的讀寫(xiě)示例importosf=open('data.dat','w+b')#創(chuàng)建或打開(kāi)文件data.datf.seek(0)#定位到開(kāi)始位置f.write(b'Hello')#寫(xiě)入字節(jié)數(shù)據(jù)f.write(b'World')#寫(xiě)入字節(jié)數(shù)據(jù)f.seek(-5,os.SEEK_END)#定位到結(jié)束位置倒數(shù)第5個(gè)位置b=f.read(5)#讀取5個(gè)字節(jié)print(b)#輸出:b'World'6.9os模塊和文件目錄操作使用標(biāo)準(zhǔn)庫(kù)中的os模塊,用戶(hù)可以實(shí)現(xiàn)操作系統(tǒng)的目錄處理創(chuàng)建目錄、刪除目錄:getcwd()(獲取當(dāng)前工作目錄)、chdir()(切換當(dāng)前工作目錄)、mkdir()(創(chuàng)建單級(jí)目錄)、makedirs()(創(chuàng)建多級(jí)目錄)、listdir()(顯示目錄中的文件/子目錄列表)、rmdir()(刪除目錄)、remove()(刪除文件)和rename()(文件或目錄重命名)等函數(shù)【例6.16】文件目錄操作示例>>>importos>>>os.getcwd()#顯示當(dāng)前目錄'C:\\Users\\jh\\AppData\\Local\\Programs\\Python\\Python312'>>>os.chdir(r"c:\pythonb")#切換當(dāng)前目錄>>>os.listdir(r"c:\pythonb")#列舉當(dāng)前目錄中的內(nèi)容['ch01','ch02','ch03','ch04','ch05','ch06','ch07','ch08','ch09','ch10','ch11','ch12','data.json','data1.txt']>>>os.makedirs(r"c:\pythonb\temp\dir1")#創(chuàng)建多級(jí)子目錄。注:mkdir()只能創(chuàng)建一級(jí)子目錄>>>os.rename(r"c:\pythonb\temp\dir1",r"c:\pythonb\temp\dir2")#子目錄重命名6.10綜合應(yīng)用:文件數(shù)據(jù)的統(tǒng)計(jì)和分析6.10.1統(tǒng)計(jì)儲(chǔ)存在文本文件中的學(xué)生成績(jī)信息【例6.17】編寫(xiě)程序(process_txt.py):讀取data.txt中的數(shù)據(jù)(假設(shè)文件中存儲(chǔ)若干成績(jī),每行一個(gè)成績(jī)),統(tǒng)計(jì)分析成績(jī)的個(gè)數(shù)、最高分、最低分以及平均分,并把結(jié)果寫(xiě)入result.txt文件中scores=[]#創(chuàng)建空列表,用于儲(chǔ)存從文本文件中讀取的成績(jī)信息txtfilepath='data.txt'withopen(txtfilepath,encoding='utf-8')asf:#打開(kāi)文件forsinf.readlines():#讀取并遍歷文件行scores.append(int(s))result_filepath='result.txt'withopen(result_filepath,'w',encoding='utf-8')asf:#打開(kāi)文件f.write("成績(jī)個(gè)數(shù):{}\n".format(len(scores)))f.write("最高分:{}\n".format(max(scores)))f.write("最低分:{}\n".format(min(scores)))f.write("平均分:{}\n".format(sum(scores)/len(scores)))6.10.2統(tǒng)計(jì)儲(chǔ)存在CSV文件中的學(xué)生成績(jī)信息【例6.18】編寫(xiě)程序(read_csv.py):讀取data.csv中的數(shù)據(jù),統(tǒng)計(jì)分析成績(jī)的平均值,并打印出結(jié)果。假設(shè)data.csv的內(nèi)容如下importcsvscores=[]#創(chuàng)建空列表,用于儲(chǔ)存從csv文件中讀取的成績(jī)信息csvfilepath='data.csv'withopen(csvfilepath,newline='')asf:#打開(kāi)文件f_csv=csv.reader(f)#創(chuàng)建csv.reader對(duì)象headers=next(f_csv)#標(biāo)題forrowinf_csv:#循環(huán)讀取各行(列表)scores.append(row)print("原始記錄:",scores)scoresData=[]forrecinscores:scoresData.append(int(rec[2]))print("成績(jī)列表:",scoresData)print("平均成績(jī):",sum(scoresData)/len(scoresData))6.10.3基于字典的通信錄本節(jié)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的基于字典數(shù)據(jù)結(jié)構(gòu)的通信錄管理系統(tǒng)。系統(tǒng)采用JSON文件來(lái)保存數(shù)據(jù)。通信錄設(shè)計(jì)為字典{name:tel}。程序開(kāi)始時(shí)從addressbook.json文件中讀取通信錄,然后顯示主菜單,具體包括如下功能。(1)顯示通訊錄清單。如果通信錄字典中存在用戶(hù)信息,則顯示通訊錄清單,包括姓名和電話號(hào)碼;如果通信錄字典中不存在任何用戶(hù)信息,則提示“通訊錄為空”。(2)查詢(xún)聯(lián)系人。提示用戶(hù)輸入姓名name,在通信錄字典中查詢(xún)?cè)撴I,如果存在,輸出聯(lián)系人信息;如果不存在,提示是否新建聯(lián)系人。(3)插入新的聯(lián)系人。提示用戶(hù)輸入姓名name,在通信錄字典中查詢(xún)?cè)撴I,如果存在,提示是否更新聯(lián)系人信息;如果不存在,提示輸入電話號(hào)碼,并插入字典鍵-值對(duì)。(4)刪除已有聯(lián)系人。提示用戶(hù)輸入姓名name,在通信錄字典中查詢(xún)?cè)撴I,如果不存在,輸出“聯(lián)系人不存在”的提示信息;如果存在,從通信錄字典中刪除鍵-值對(duì),并輸出信息。(5)退出。保存通信錄字典到addressbook.json中,退出循環(huán)【例6.19】基于字典的通信錄(addressbook.py)(1)"""簡(jiǎn)易通信錄程序"""importos,jsonab={}#通信錄保存在字典中#從JSON文件中讀取通信錄ifos.path.exists("addressbook.json"):withopen(r'addressbook.json','r',encoding='utf-8')asf:ab=json.load(f)whileTrue:print("|---歡迎使用通訊錄程序---|")print("|---1:顯示通訊錄清單---|")print("|---2:查詢(xún)聯(lián)系人資料---|")print("|---3:插入新的聯(lián)系人---|")print("|---4:刪除已有聯(lián)系人---|")print("|---0:退出-------------|")choice=input('請(qǐng)選擇功能菜單(0-4):’)ifchoice=='1':if(len(ab)==0):print("通訊錄為空")else:fork,vinab.items():print("姓名={},聯(lián)系電話={}".format(k,v))【例6.19】基于字典的通信錄(addressbook.py)(2)

elifchoice=='2':name=input("請(qǐng)輸入聯(lián)系人姓名:")if(namenotinab):ask=input("聯(lián)系人不存在,是否增加用戶(hù)資料(Y/N)")ifaskin["Y","y"]:tel=input("請(qǐng)輸入用戶(hù)聯(lián)系電話:")ab[name]=telelse:print("聯(lián)系人信息:{}{}".format(name,ab[name]))elifchoice=='3':name=input("請(qǐng)輸入聯(lián)系人姓名:")if(nameinab):print("已存在聯(lián)系人:{}{}".format(name,ab[name]))ask=input("是否修改用戶(hù)資料(Y/N)")ifaskin["Y","y"]:tel=input("請(qǐng)輸入用戶(hù)聯(lián)系電話:")dict[name]=tel【例6.19】基于字典的通信錄(addressbook.py)(3)

else:tel=input("請(qǐng)輸入用戶(hù)聯(lián)系電話:")ab[name]=telelifchoice=='4':name=input("請(qǐng)輸入聯(lián)系人姓名:")if(namenotinab):print("聯(lián)系人不存在:{}".format(name))else:tel=ab.pop(name)print("刪除聯(lián)系人:{}{}".format(name,tel))elifchoice=='0':#保存到JSON文件并退出循環(huán)

withopen(r'addressbook.json','w',encoding='utf-8')asf:json.dump(ab,f)break實(shí)驗(yàn)和習(xí)題上機(jī)實(shí)踐1~10復(fù)習(xí)題選擇題填空題思考題考級(jí)題庫(kù)本章所涉及的全國(guó)計(jì)算機(jī)等級(jí)考試(二級(jí)Python語(yǔ)言程序設(shè)計(jì))、江蘇省高等學(xué)校計(jì)算機(jī)等級(jí)考試(二級(jí)Python語(yǔ)言)以及上海市高等學(xué)校計(jì)算機(jī)等級(jí)考試二級(jí)(Python程序設(shè)計(jì))題庫(kù)(真題和模擬題)以電子版形式提供(開(kāi)源學(xué)習(xí)資源,隨時(shí)增補(bǔ)完善),具體請(qǐng)掃描教程二維碼本章小結(jié)第二版▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍第7章數(shù)值處理與計(jì)算7.1math模塊和數(shù)學(xué)函數(shù)7.2random模塊和隨機(jī)函數(shù)7.3NumPy模塊和數(shù)值運(yùn)算7.4time模塊和程序計(jì)時(shí)7.5應(yīng)用舉例7.1math模塊和數(shù)學(xué)函數(shù)在Python標(biāo)準(zhǔn)庫(kù)math中,提供了許多常用的數(shù)學(xué)函數(shù),包括三角函數(shù)、對(duì)數(shù)函數(shù)和其他通用數(shù)學(xué)函數(shù)math模塊包含兩個(gè)常量math.pi和math.e,分別對(duì)應(yīng)于圓周率π(3.141592653589793)和自然常數(shù)e(2.718281828459045)【例7.1】探索math模塊提供的功能>>>importmath#導(dǎo)入math模塊>>>help(math)#顯示math模塊的幫助信息>>>dir(math)#顯示math模塊的所有成員>>>help(math.radians)#顯示math.radians(角度轉(zhuǎn)換為弧度的函數(shù))的幫助信息>>>math.sin(math.radians(30))#計(jì)算30度角度的正弦值math模塊的API【例7.2】數(shù)學(xué)函數(shù)的使用示例(math_test.py):輸入三條邊長(zhǎng),如果可以構(gòu)成三角形,則求三角形的面積、周長(zhǎng)、某邊長(zhǎng)所對(duì)應(yīng)的高、最長(zhǎng)邊長(zhǎng)、最短邊長(zhǎng);否則,報(bào)錯(cuò):“不能構(gòu)成三角形”importmath#三角形三邊a、b、c,必須滿(mǎn)足:三條邊長(zhǎng)均大于零,并且任意兩邊之和大于第三邊a=int(input("請(qǐng)輸入邊長(zhǎng)a:"))b=int(input("請(qǐng)輸入邊長(zhǎng)b:"))c=int(input("請(qǐng)輸入邊長(zhǎng)c:"))if(a>0andb>0andc>0anda+b>canda+c>bandb+c>a):h=(a+b+c)/2#周長(zhǎng)的一半

area=math.sqrt(h*(h-a)*(h-b)*(h-c))#面積

perimeter=a+b+c#周長(zhǎng)

height_a=2*area/a#邊長(zhǎng)a所對(duì)應(yīng)的高

max_side=max(a,b,c)#最長(zhǎng)邊長(zhǎng)

min_side=min(a,b,c)#最短邊長(zhǎng)

print("三角形的三條邊為:{0}、{1}和{2}".format(a,b,c))print("三角形的面積為:{0:.2f}".format(area))print("三角形的周長(zhǎng)為:{0:.2f}".format(perimeter))print("邊長(zhǎng)A對(duì)應(yīng)的高為:{0:.2f}".format(height_a))print("三角形的最長(zhǎng)的邊為:{0:.2f}".format(max_side))print("三角形的最短的邊為:{0:.2f}".format(min_side))else:print("三條邊:{0}、{1}和{2},不能構(gòu)成三角形".format(a,b,c))【例7.3】數(shù)學(xué)函數(shù)的使用示例(quadratic.py):求一元二次方程的實(shí)數(shù)解。其中,系數(shù)b和c由命令行參數(shù)所確定importmathimportsysb=float(sys.argv[1])c=float(sys.argv[2])discriminant=b*b-4.0*cifdiscriminant>=0:d=math.sqrt(discriminant)print("x1=",(-b+d)/2.0)print("x2=",(-b-d)/2.0)else:print("此方程無(wú)實(shí)數(shù)解")7.2random模塊和隨機(jī)函數(shù)random模塊包含各種偽隨機(jī)數(shù)生成函數(shù),以及各種根據(jù)概率分布生成隨機(jī)數(shù)的函數(shù)使用random模塊函數(shù)seed()可以設(shè)置偽隨機(jī)數(shù)生成器的種子>>>importrandom>>>random.seed(1)#設(shè)置種子為1>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:2,5,1,3,1,>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:4,4,4,4,2,>>>random.seed(1)#重新設(shè)置種子為1,結(jié)果重復(fù)>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:2,5,1,3,1,>>>random.seed(10)#重新設(shè)置種子為10>>>foriinrange(5):print(random.randint(1,5),end=',')#輸出:5,1,4,4,5,名稱(chēng)說(shuō)明示例結(jié)果(隨機(jī))randrange(stop)返回隨機(jī)整數(shù)N,N屬于序列[0,stop)foriinrange(10):print(randrange(10),end=',')8,6,7,4,0,9,1,5,4,9,randrange(start,stop[,step])返回隨機(jī)整數(shù)N,N屬于序列[start,stop,step)foriinrange(10):print(randrange(1,5),end=',')3,4,1,2,3,4,4,4,1,1,randint(a,b)返回隨機(jī)整數(shù)N,使得a<=N<=b,即randrange(a,b+1)foriinrange(10):print(randint(1,5),end=',')1,2,5,5,1,1,1,2,3,4,getrandbits(k)返回隨機(jī)整數(shù)N,使得N的位(bit)長(zhǎng)為kforiinrange(10):print(getrandbits(2),end=',')0,0,1,2,1,3,1,1,1,1,【例7.6】猜數(shù)游戲(guess.py)首先隨機(jī)產(chǎn)生一個(gè)1~100以?xún)?nèi)的整數(shù),請(qǐng)用戶(hù)猜測(cè)具體是哪個(gè)數(shù),即:不斷從標(biāo)準(zhǔn)輸入讀取用戶(hù)的猜測(cè)值,并根據(jù)猜測(cè)值給出提示信息:“太大”、“太小”或“正確!”邏輯思維:以推理和演繹為特征,以數(shù)學(xué)學(xué)科為代表實(shí)驗(yàn)思維:以實(shí)驗(yàn)和驗(yàn)證為特征,以物理學(xué)科為代表計(jì)算思維:以設(shè)計(jì)和構(gòu)造為特征,以計(jì)算機(jī)學(xué)科為代表importrandomsecret=random.randrange(1,101)guess=0whileguess!=secret:guess=int(input("請(qǐng)猜測(cè)一個(gè)100之內(nèi)的數(shù):"))if(guess<secret):print('太小')elif(guess>secret):print('太大')else:print('正確!')7.3NumPy模塊和數(shù)值運(yùn)算NumPy庫(kù)是Python的數(shù)值計(jì)算擴(kuò)展,用于高效存儲(chǔ)和處理數(shù)組和矩陣,許多科學(xué)計(jì)算庫(kù)(包括matplotlib、pandas、SciPy和SymPy等)都基于NumPy。NumPy是Python數(shù)值計(jì)算的基石,它提供了兩種基本的對(duì)象——ndarray(n-dimensionalarrayobject,n維數(shù)組對(duì)象,即數(shù)組)和ufunc(universalfunctionobject,通用函數(shù)對(duì)象)。ndarray是存儲(chǔ)單一數(shù)據(jù)類(lèi)型的多維數(shù)組,而ufunc則是能夠?qū)?shù)組進(jìn)行處理的通用函數(shù)數(shù)值運(yùn)算模塊的基本使用Python的列表可以用作數(shù)組,但由于列表的元素可以是任何對(duì)象,故列表中所保存的是對(duì)象的指針,對(duì)于數(shù)值運(yùn)算會(huì)浪費(fèi)內(nèi)存和CPU計(jì)算時(shí)間。而Python標(biāo)準(zhǔn)庫(kù)array不支持多維數(shù)值,也不支持?jǐn)?shù)值運(yùn)算函數(shù),同樣不適合數(shù)值計(jì)算。Python擴(kuò)展模塊NumPy提供數(shù)組和矩陣處理功能(類(lèi)似于MATLAB),提供了更高效的數(shù)值處理功能。使用NumPy模塊一般遵循如下幾個(gè)步驟。(1)安裝NumPy模塊。具體步驟請(qǐng)參見(jiàn)本教程第1章相關(guān)內(nèi)容。(2)使用importnumpy語(yǔ)句導(dǎo)入NumPy模塊。(3)創(chuàng)建數(shù)組。(4)處理數(shù)組創(chuàng)建數(shù)組創(chuàng)建數(shù)組包括如下幾種方式。(1)通過(guò)array()函數(shù)把序列對(duì)象參數(shù)轉(zhuǎn)換為數(shù)組。(2)通過(guò)arange()、linspace()和logspace()函數(shù)創(chuàng)建數(shù)組【例7.7】通過(guò)array()函數(shù)創(chuàng)建數(shù)組示例>>>importnumpyasnp>>>a=np.array([1,2,3])#一維數(shù)組>>>b=np.array([[1,2,3],[4,5,6],[7,8,9]])#二維數(shù)組>>>a#輸出:array([1,2,3])>>>barray([[1,2,3],[4,5,6],[7,8,9]])說(shuō)明:如果傳遞給array對(duì)象的參數(shù)是多層嵌套的序列,將創(chuàng)建多維數(shù)組【例7.8】通過(guò)arange()、linspace()和logspace()函數(shù)創(chuàng)建數(shù)組示例>>>a=np.arange(0,10,2)>>>a#輸出:array([0,2,4,6,8])>>>b=np.linspace(0,2*np.pi,10)>>>barray([0.,0.6981317,1.3962634,2.0943951,2.7925268,3.4906585,4.1887902,4.88692191,5.58505361,6.28318531])>>>c=np.logspace(0,2,10)>>>carray([1.,1.66810054,2.7825594,4.64158883,7.74263683,12.91549665,21.5443469,35.93813664,59.94842503,100.])說(shuō)明:(1)arange()函數(shù)通過(guò)指定開(kāi)始值、終值和步長(zhǎng)來(lái)創(chuàng)建一維數(shù)組。(2)linspace()函數(shù)通過(guò)指定開(kāi)始值、終值和元素個(gè)數(shù)來(lái)創(chuàng)建一維數(shù)組,可以通過(guò)endpoint命名參數(shù)指定是否包括終值,缺省設(shè)置是包括終值。(3)logspace()函數(shù)和linspace()類(lèi)似,用于創(chuàng)建等比數(shù)列處理數(shù)組數(shù)組元素的存取方法和Python列表的存取方法相同。但是,通過(guò)下標(biāo)范圍獲取的是原始數(shù)組的一個(gè)視圖,與原始數(shù)組共享同一塊數(shù)據(jù)空間,這與Python的列表切片操作不同。數(shù)組也支持常用的運(yùn)算符操作,例如+、-、*、/等。NumPy內(nèi)置許多針對(duì)數(shù)組的每個(gè)元素分別進(jìn)行操作的函數(shù),這些函數(shù)稱(chēng)之為universalfunction,一般基于C語(yǔ)言級(jí)別實(shí)現(xiàn),因此其計(jì)算速度非??臁纠?.9】數(shù)組處理示例。其中np.exp2(x)計(jì)算2x、np.exp(x)計(jì)算ex、np.power(x,2)計(jì)算x2>>>importnumpyasnp #導(dǎo)入模塊>>>x=np.linspace(0,10,11);x #x=0~10array([0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,10.])>>>y1=np.exp2(x);y1 #y1=2**xarray([1.000e+00,2.000e+00,4.000e+00,8.000e+00,1.600e+01,3.200e+01,6.400e+01,1.280e+02,2.560e+02,5.120e+02,1.024e+03])>>>y2=np.exp(x);y2 #y2=e**xarray([1.00000000e+00,2.71828183e+00,7.38905610e+00,2.00855369e+01,5.45981500e+01,1.48413159e+02,4.03428793e+02,1.09663316e+03,2.98095799e+03,8.10308393e+03,2.20264658e+04])>>>y3=np.power(x,2);y3 #y3=x**2array([0.,1.,4.,9.,16.,25.,36.,49.,64.,81.,100.])數(shù)組應(yīng)用舉例使用模塊NumPy中的函數(shù)可以實(shí)現(xiàn)數(shù)值處理;結(jié)合Matplotlib中的繪圖函數(shù)可以很方便地輸出各種處理結(jié)果【例7.10】數(shù)組應(yīng)用示例(funcfig.py):利用NumPy模塊中的函數(shù)和Matplotlib中的繪圖函數(shù)繪制y=x2和y=2x的圖形importnumpyasnp #導(dǎo)入模塊importmatplotlib.pyplotasplt #導(dǎo)入模塊importmath #導(dǎo)入模塊x=np.linspace(0,10,100) #x軸坐標(biāo)值y1=np.power(x,2) #y1=x**2y2=np.exp2(x) #y2=2**xplt.plot(x,y1,x,y2) #繪制圖形plt.show() #顯示圖形7.4日期和時(shí)間處理相關(guān)術(shù)語(yǔ)epoch(新紀(jì)元):系統(tǒng)規(guī)定的時(shí)間起始點(diǎn)UTC(CoordinatedUniversalTime):協(xié)調(diào)世界時(shí)DST(DaylightSavingTime):夏令時(shí)time模塊和時(shí)間對(duì)象處理time模塊的struct_time對(duì)象是一個(gè)命名元組,用于表示時(shí)間對(duì)象,包括9個(gè)字段屬性,即tm_year(年)、tm_mon(月)、tm_mday(日)、tm_hour(時(shí))、tm_min(分)、tm_sec(秒)、tm_wday(星期[0,6],0表示星期一)、tm_yday(該年第幾天[1,366])、tm_isdst(是否夏時(shí)令,0否、1是、-1未知)7.4日期和時(shí)間處理time模塊主要包含以下時(shí)間處理函數(shù)【例7.11】time模塊和時(shí)間對(duì)象處理示例time模塊程序運(yùn)行時(shí)間測(cè)量time模塊還包含如下用于測(cè)量程序性能的函數(shù)。process_time():返回當(dāng)前進(jìn)程處理器運(yùn)行時(shí)間。perf_counter():返回性能計(jì)數(shù)器。monotonic():返回單向時(shí)鐘【例7.12】測(cè)量程序運(yùn)行時(shí)間importtimedeftest():sum=0foriinrange(0,9999999):sum+=ireturnsumif__name__=='__main__':t1=time.monotonic()#單向時(shí)鐘

print(test())t2=time.monotonic()#單向時(shí)鐘

print('運(yùn)行時(shí)間:',t2-t1)datetime模塊和日期時(shí)間對(duì)象處理兩個(gè)常量:datetime.MINYEAR(1)和datetime.MAXYEAR(9999)datetime模塊包含用于表示日期的date對(duì)象、表示時(shí)間的time對(duì)象和表示日期時(shí)間的datetime對(duì)象。timedelta對(duì)象表示日期或時(shí)間之間的差值,可以用于日期或時(shí)間的運(yùn)算通過(guò)datetime模塊的date.today()函數(shù)可以返回表示當(dāng)前日期的date對(duì)象,通過(guò)其實(shí)例對(duì)象方法,可以獲取其年、月、日等信息通過(guò)datetime模塊的datetime.now()函數(shù)可以返回表示當(dāng)前日期時(shí)間的datetime對(duì)象,通過(guò)其實(shí)例對(duì)象方法,可以獲取其年、月、日、時(shí)、分、秒等信息datetime模塊有兩個(gè)常量【例7.13】獲取當(dāng)前日期時(shí)間示例(datetimes.py)importdatetimed=datetime.date.today()dt=datetime.datetime.now()print("當(dāng)前的日期是%s"%d)print("當(dāng)前的日期和時(shí)間是%s"%dt)print("ISO格式的日期和時(shí)間是%s"%dt.isoformat())print("當(dāng)前的年份是%s"%dt.year)print("當(dāng)前的月份是%s"%dt.month)print("當(dāng)前的日期是%s"%dt.day)print("dd/mm/yyyy格式是%s/%s/%s"%(dt.day,dt.month,dt.year))print("當(dāng)前小時(shí)是%s"%dt.hour)print("當(dāng)前分鐘是%s"%dt.minute)print("當(dāng)前秒是%s"%dt.second)日期時(shí)間格式化為字符串time模塊中的strftime()函數(shù)將struct_time對(duì)象格式化為字符串【例7.14】日期時(shí)間格式化為字符串示例1日期時(shí)間字符串解析為日期時(shí)間對(duì)象time模塊中的strptime()函數(shù)將時(shí)間字符串解析為struct_time對(duì)象【例7.16】日期時(shí)間字符串解析示例1>>>fromtimeimport*>>>strptime("30Nov22","%d%b%y")time.struct_time(tm_year=2022,tm_mon=11,tm_mday=30,tm_hour=0,tm_min=0,tm_sec=0,tm_wday=2,tm_yday=334,tm_isdst=-1)日期時(shí)間字符串解析為日期時(shí)間對(duì)象【例7.17】日期時(shí)間字符串解析示例2>>>datetime.datetime.strptime(‘2021-08-18','%Y-%m-%d')datetime.datetime(2021,8,18,0,0)7.5應(yīng)用舉例7.5.1使用阿基米德方法估算圓周率7.5.2使用隨機(jī)數(shù)估值圓周率7.5.3程序運(yùn)行時(shí)間測(cè)量7.5.1使用阿基米德方法估算圓周率使用阿基米德方法估算圓周率的數(shù)學(xué)方法如下:使用單位圓的內(nèi)接多邊形的周長(zhǎng)估算圓的周長(zhǎng)通過(guò)增加邊的數(shù)量(從而減少邊的長(zhǎng)度),內(nèi)接多邊形的周長(zhǎng)將越來(lái)越接近圓的實(shí)際周長(zhǎng)假設(shè)半徑為h的圓內(nèi)接正N多邊形,那么圓周長(zhǎng)c≈N*s由于B=360/N,故A=180/N,s/2=h*sin(radians(180/N)),因此c≈N*2h*sin(radians(360/N))=2πh,結(jié)果π≈N*sin(radians(360/N))【例7.18】使用阿基米德方法估算圓周率(archimedes.py)importmathdefarchimedes(numSides):halfAngleA=180.0/numSidesarchi_pi=numSides*math.sin(math.radians(halfAngleA))returnarchi_piif__name__=="__main__":forsidesinrange(8,100,8):print(sides,archimedes(sides))7.5.2使用隨機(jī)數(shù)估值圓周率【例7.19】使用隨機(jī)數(shù)估值圓周率(pi.py)importrandomdefpi(trials):"""通過(guò)隨機(jī)點(diǎn)位置近似計(jì)算圓周率pi"""hits=0#命中圓環(huán)的點(diǎn)的數(shù)量

foriinrange(trials):x=random.uniform(-1,1)#隨機(jī)生成-1到1之間的x坐標(biāo)

y=random.uniform(-1,1)#隨機(jī)生成-1到1之間的y坐標(biāo)

ifx**2+y**2<=1:#如果位于圓環(huán)內(nèi),則命中數(shù)加1hits+=1return4*hits/trials#測(cè)試代碼if__name__=="__main__":foriinrange(5):n=10000*(10**i)print("試驗(yàn){}次后計(jì)算近似圓周率為:{}".format(n,pi(n)))7.5.3程序運(yùn)行時(shí)間測(cè)量當(dāng)程序的復(fù)雜度增加(例如,循環(huán)次數(shù)增大)時(shí),程序運(yùn)行的時(shí)間顯著增加。通過(guò)time模塊中的time()函數(shù)可以測(cè)量程序運(yùn)行的時(shí)間【例7.20】程序運(yùn)行時(shí)間測(cè)量(timing.py)importtimedeftiming(f,data):"""測(cè)量函數(shù)調(diào)用f(data)的運(yùn)行時(shí)間分析"""start=time.time()#記錄開(kāi)始時(shí)間

f(data)#運(yùn)行f(data)end=time.time()#記錄結(jié)束時(shí)間

returnend-start#返回執(zhí)行時(shí)間#測(cè)試代碼if__name__=="__main__":importpi#參見(jiàn)7.4.2使用隨機(jī)數(shù)估值圓周率

foriinrange(3):n=10000*(100**i)t=timing(pi.pi,n)print("pi({})的運(yùn)行時(shí)間為:{}".format(n,t))實(shí)驗(yàn)和習(xí)題上機(jī)實(shí)踐實(shí)踐1~5復(fù)習(xí)題單選題填空題思考題考級(jí)題庫(kù)本章所涉及的全國(guó)計(jì)算機(jī)等級(jí)考試(二級(jí)Python語(yǔ)言程序設(shè)計(jì))、江蘇省高等學(xué)校計(jì)算機(jī)等級(jí)考試(二級(jí)Python語(yǔ)言)以及上海市高等學(xué)校計(jì)算機(jī)等級(jí)考試二級(jí)(Python程序設(shè)計(jì))題庫(kù)(真題和模擬題)以電子版形式提供(開(kāi)源學(xué)習(xí)資源,隨時(shí)增補(bǔ)完善),具體請(qǐng)掃描教程二維碼本章小結(jié)第二版本章要點(diǎn):8.1字符串對(duì)象和文本處理8.2字符串格式化8.3正則表達(dá)式和re模塊8.4中文分詞庫(kù)jieba8.5詞云庫(kù)Wordcloud8.6應(yīng)用舉例第8章字符串和文本處理▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍第二版▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍8.1字符串對(duì)象和文本處理字符串對(duì)象字符串(str)是Python的內(nèi)置數(shù)據(jù)類(lèi)型。通過(guò)字符串字面量或str構(gòu)造函數(shù)可以創(chuàng)建字符串對(duì)象使用str對(duì)象提供的方法可以實(shí)現(xiàn)常用的字符串處理功能。str對(duì)象是不可變對(duì)象,故調(diào)用方法返回的字符串是新創(chuàng)建的對(duì)象。str對(duì)象的方法有字符串對(duì)象的方法和str類(lèi)方法兩種調(diào)用方式【例8.1】字符串對(duì)象方法示例【例8.2】探索字符串對(duì)象的方法>>>s='abc'>>>s.upper()#字符串對(duì)象s的方法。輸出:'ABC'>>>str.upper(s)#str類(lèi)方法,字符串s作為參數(shù)。輸出:'ABC'>>>help(str)#查看str對(duì)象的幫助>>>dir(str)#列舉str對(duì)象的成員>>>help(str.lower)第二版▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍字符串的類(lèi)型判斷str.isalnum()#是否全為字母或者數(shù)字str.isalpha()#是否全為字母str.isdecimal()#是否只包含十進(jìn)制數(shù)字字符str.isdigit()#是否全為數(shù)字(0~9)str.isidentifier()#是否是合法標(biāo)識(shí)str.islower()#是否全為小寫(xiě)str.isupper()#是否全為大寫(xiě)str.isnumeric()#是否只包含數(shù)字字符str.isprintable()#是否只包含可打印字符str.isspace()#是否只包含空白字符str.istitle()#是否為標(biāo)題,即各單詞首字母大寫(xiě)【例8.3】字符串類(lèi)型判斷示例>>>s1='yellowribbon'>>>s2='PascalCase'>>>s3='123'>>>s4='iPhone7'>>>s1.islower()True>>>s2.isupper()False>>>s4.isalnum()True>>>s3.isnumeric()True>>>s1.isdigit()False>>>s2.istitle()True第二版▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍字符串大小寫(xiě)轉(zhuǎn)換str.capitalize()#轉(zhuǎn)換為首字母大寫(xiě),其余小寫(xiě)str.lower()#轉(zhuǎn)換為小寫(xiě)str.upper()#轉(zhuǎn)換為大寫(xiě)str.swapcase()#大小寫(xiě)互換str.title()#轉(zhuǎn)換為各單詞首字母大寫(xiě)str.casefold()#轉(zhuǎn)換為大小寫(xiě)無(wú)關(guān)字符串比較的格式字符串【例8.4】字符串大小寫(xiě)轉(zhuǎn)換示例>>>s1='redcar'>>>s2='PascalCase'>>>s3='python3.7'>>>s4='iPhoneX'>>>s1.capitalize()'Redcar'>>>s2.lower()'pascalcase'>>>s3.upper()'PYTHON3.7>>>s2.swapcase()'pASCALcASE'>>>s1.title()'RedCar'>>>s4.casefold()'iphonex'第二版▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍字符串的填充、空白和對(duì)齊str.strip([chars])#去兩邊空格,也可指定要去除的字符列表str.lstrip([chars])#去左邊空格,也可指定要去除的字符列表str.rstrip([chars])#去右邊空格,也可指定要去除的字符列表str.zfill(width)#左填充,使用0填充到width長(zhǎng)度str.center(width[,fillchar])#兩邊填充,使用填充字符fillchar(默認(rèn)空格)填充到width長(zhǎng)度str.ljust(width[,fillchar])#左填充,使用填充字符fillchar(默認(rèn)空格)填充到width長(zhǎng)度str.rjust(width[,fillchar])#右填充,使用填充字符fillchar(默認(rèn)空格)填充到width長(zhǎng)度str.expandtabs([tabsize])#將字符串中的制表符(tab)擴(kuò)展為若干個(gè)空格,tabsize默認(rèn)為8【例8.5】字符串填充、空白和對(duì)齊示例>>>s1='123'>>>s2='123'>>>len(s2)6>>>s2.strip()'123'>>>s2.lstrip()'123'>>>s1.zfill(5)'00123'>>>s1.center(5,'')'123'>>>s1.ljust(5)'123'>>>s1.rjust(5,'0')'00123'▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍字符串的測(cè)試、查找和替換str.startswith(prefix[,start[,end]])#是否以prefix開(kāi)頭str.endswith(suffix[,start[,end]])#是否以suffix結(jié)尾str.count(sub[,start[,end]])#返回指定字符串出現(xiàn)的次數(shù)str.index(sub[,start[,end]])#搜索指定字符串,返回下標(biāo),無(wú)則導(dǎo)致ValueErrorstr.rindex(sub[,start[,end]])#從右邊開(kāi)始搜索指定字符串,返回下標(biāo)str.find(sub[,start[,end]])#搜索指定字符串,返回下標(biāo),沒(méi)有則返回-1str.rfind(sub[,start[,end]])#從右邊開(kāi)始搜索指定字符串,返回下標(biāo),沒(méi)有則返回-1str.replace(old,new[,count])#替換old為new,可選count為替換次數(shù)【例8.6】字符串測(cè)試、查找和替換示例>>>s1="abABabCD">>>s1.startswith("AB")False>>>s1.startswith("AB",2)True>>>s1.endswith("CD")True>>>s1.count("ab")2>>>s1.index("AB")2>>>s1.find("cd")-1>>>s1.find("CD")6>>>s1.replace("ab","xyz")'xyzABxyzCD'第二版▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍▍字符串的拆分和組合str.split(sep=None,maxsplit=-1)#按指定字符(默認(rèn)為空格)分割字符串,返回列表maxsplit為最大分割次數(shù),默認(rèn)-1,無(wú)限制str.rsplit(sep=None,maxsplit=-1)#從右側(cè)按指定字符分割字符串,返回列表str.partition(sep)#根據(jù)分隔符sep分割字符串為兩部分,返回元組(left,sep,right)str.rpartition(sep)#根據(jù)分隔符sep從右側(cè)分割字符串為兩部分,返回元組(left,sep,right)str.splitlines([keepends])#按行分割字符串,返回列表str.join(iterable)#組合iterable中的各元素成字符串,若包含非字符串元素,則導(dǎo)致TypeError【例8.7】字符串拆分和組合示例>>>s1='one,two,three'>>>s1.split(',')['one','two','three']>>>s1.rsplit(',',1)['one,two','three']>>>s1.partition(',')('one',',','two,three')>>>s1.rpartition(',')('one,two',',','three')>>>s2='abc\n123\nxyz'>>>s2.splitlines()['abc','123','xyz']>>>s2.splitlines(True)['abc\n','123\n','xyz']>>>s3=('a','b','c')>>>s4=':'>>>s4.join(s3)'a:b:c'>>>s4.join('

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論