国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

天外來(lái)信

2018-09-08 11:15王麗麗
中國(guó)信息技術(shù)教育 2018年16期
關(guān)鍵詞:字符串信件代碼

王麗麗

情境導(dǎo)入

忽然有一天,阿派收到一封外面世界的來(lái)信,他迫不及待地開(kāi)始讀信,卻發(fā)現(xiàn)信件內(nèi)容全是一串一串的數(shù)字……

在這一課中,學(xué)生將學(xué)習(xí)如何利用Python讀寫(xiě)文件及其拓展應(yīng)用。

讀信

在阿派讀信之前,先來(lái)了解一下Python是如何讀取文件的。

1.Python讀取文件

(1)讀取文件的簡(jiǎn)單示例

關(guān)于文件的基本處理主要有文件的打開(kāi)、操作和關(guān)閉。如表1,利用open()打開(kāi)letter.txt文件,并返回一個(gè)名為f的文件對(duì)象。其中,打開(kāi)文件的模式有只讀、寫(xiě)入、追加等,默認(rèn)的文件訪問(wèn)模式為只讀(r)。表1的程序運(yùn)行后,將會(huì)讀取如圖1的文件letter.txt,運(yùn)行的結(jié)果如圖2。

(2)read()方法

當(dāng)read()的括號(hào)內(nèi)為空或負(fù)數(shù)時(shí),將讀取文件的所有內(nèi)容。如果調(diào)用f.read(size),size是一個(gè)可選的數(shù)字類型的參數(shù),則將讀取指定的數(shù)據(jù)。比如,將表1的第3行代碼修改為print(f.read(5)),則程序運(yùn)行結(jié)果如圖3。

(3)readline()方法

f.readline()會(huì)從文件中讀取當(dāng)前指針下一行內(nèi)容的字符串。比如,將表1的第3行代碼修改為print(f.readline()),則程序運(yùn)行結(jié)果如下頁(yè)圖4。如果將第3行修改為2行readline(),則運(yùn)行效果如下頁(yè)圖5,由于print默認(rèn)換行,會(huì)在輸出一行字符串后產(chǎn)生一行空行。如果不想產(chǎn)生空行,則將代碼修改為print(f.readline(), end=''),其中的end=''表示print輸出之后不換行。

(4)readlines()方法

f.readlines()將返回整個(gè)文件內(nèi)容的列表,每一項(xiàng)是以換行符結(jié)尾的一行字符串。比如,將表1的第3行代碼修改為print(f.readlines()),則程序運(yùn)行結(jié)果如下頁(yè)圖6。

(5)for line in f:的作用

如下頁(yè)表2,利用for line in f:可以實(shí)現(xiàn)文件的遍歷。這種做法在讀取文件時(shí),不是一次性讀取全部文件,而是采用每次讀取一行的方式。

關(guān)于文件的讀取模式,除了r(只讀)模式以外,還有rb模式,表示以二進(jìn)制格式打開(kāi)一個(gè)文件用于只讀。另外,還有r+模式,表示打開(kāi)一個(gè)文件用于讀寫(xiě)。還有rb+模式,可以用二進(jìn)制格式打開(kāi)一個(gè)文件用于讀寫(xiě)。以上四種模式,文件指針都會(huì)放在文件的開(kāi)頭。

2.破譯天外來(lái)信

在了解了Python讀取文件的基本操作后,我們和阿派一起來(lái)解讀那封全是數(shù)字的信件。信件的內(nèi)容如下頁(yè)圖7,為十行數(shù)字。如果按照一定的規(guī)則來(lái)讀信,可以將其解讀為如圖8的圖案。具體的規(guī)則是:每一行為一組數(shù)據(jù)。第1個(gè)數(shù)字表示前進(jìn)的像素;第2個(gè)數(shù)字為0表示左轉(zhuǎn),1表示右轉(zhuǎn);第3個(gè)數(shù)字表示旋轉(zhuǎn)角度;第4~6個(gè)數(shù)字分別表示RGB顏色。據(jù)此規(guī)則,第1行數(shù)字表示向默認(rèn)的水平向右的方向繪制一條紅色的直線,再向右旋轉(zhuǎn)144度。

結(jié)合turtle庫(kù),利用如圖9的核心代碼,可以實(shí)現(xiàn)如圖8的信件圖案的繪制效果。其中的第4行代碼中,line.split(‘,)表示以逗號(hào)區(qū)分間隔,對(duì)字符串切片。map(float,line.split(‘,))表示對(duì)指定序列做映射,將每一個(gè)元素轉(zhuǎn)為浮點(diǎn)數(shù)。list表示將結(jié)果保存為列表,比如[300.0, 1.0, 144.0, 1.0, 0.0, 0.0]。result.append表示追加到result列表中。第5行代碼將讀取的信件內(nèi)容輸出至屏幕,效果如圖10。第6~12行代碼實(shí)現(xiàn)了繪制圖案的過(guò)程。

對(duì)于信件中的那一串串?dāng)?shù)字,我們還可以使用不同的規(guī)則來(lái)解讀,當(dāng)然所繪制的圖案也就不同。

回信

1.Python寫(xiě)入文件

利用write()方法,可以將數(shù)據(jù)寫(xiě)入指定文件中。如圖11,先打開(kāi)已有文件或新建一個(gè)空白的文本文檔reply.txt,利用input函數(shù)提示用戶輸入回信內(nèi)容,并將輸入的字符串寫(xiě)入reply文件,再讀取信件內(nèi)容,并關(guān)閉文件。其中,f.seek(0)表示重新設(shè)置文件讀取指針到開(kāi)頭。如圖12,利用a+模式還可以追加信件內(nèi)容。

常用的文件寫(xiě)入模式有w模式,表示打開(kāi)一個(gè)文件且只能寫(xiě)入。如圖11中w+模式表示打開(kāi)一個(gè)文件用于讀寫(xiě)。w和w+模式下,如果該文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件。圖12的a+模式表示打開(kāi)一個(gè)文件用于讀寫(xiě)。如果該文件已存在,文件指針將會(huì)放在文件的結(jié)尾,即追加模式。如果該文件不存在,則創(chuàng)建新文件用于讀寫(xiě)。

2.回信

第119頁(yè)的圖11~12的文件寫(xiě)入方式,都只能寫(xiě)入一行數(shù)據(jù)。一般情況下,正式的寫(xiě)信,需要輸入多行文本,直至輸入為空時(shí),表示寫(xiě)信結(jié)束。如第119頁(yè)圖13,我們可以利用while循環(huán)語(yǔ)句實(shí)現(xiàn)多行回信的功能。而在按下兩次回車(chē)鍵后,即輸入為空時(shí),會(huì)返回信件內(nèi)容(如第119頁(yè)圖14)。

參照阿派破譯數(shù)字信件的過(guò)程,你也可以逆向設(shè)計(jì),將回信內(nèi)容設(shè)置為幾行數(shù)字,并按照特定規(guī)則來(lái)讀取,實(shí)現(xiàn)特定的圖案效果。

在Python中的文件讀寫(xiě),還有其他的拓展應(yīng)用,如讀取Excel文件,或者利用matplotlib第三方庫(kù)來(lái)繪制2D圖表等,你可以根據(jù)實(shí)際需要來(lái)進(jìn)行設(shè)計(jì)和應(yīng)用。

猜你喜歡
字符串信件代碼
My Vacation
一種基于PowerBuilder環(huán)境字符串相似度算法
神秘的代碼
SQL server 2008中的常見(jiàn)的字符串處理函數(shù)
倍增法之后綴數(shù)組解決重復(fù)子串的問(wèn)題
一周機(jī)構(gòu)凈增(減)倉(cāng)股前20名
重要股東二級(jí)市場(chǎng)增、減持明細(xì)
近期連續(xù)上漲7天以上的股
最簡(jiǎn)單的排序算法(續(xù))
有獎(jiǎng)問(wèn)答
武宁县| 香格里拉县| 衡东县| 昌平区| 宁波市| 浦城县| 满城县| 罗甸县| 唐河县| 阿勒泰市| 靖西县| 宽甸| 伊川县| 右玉县| 开鲁县| 辰溪县| 通州区| 土默特右旗| 富蕴县| 唐海县| 乌鲁木齐县| 历史| 固原市| 古浪县| 建水县| 林州市| 涞源县| 开平市| 承德县| 临桂县| 广平县| 新密市| 平谷区| 郴州市| 塔城市| 肥城市| 南昌县| 保康县| 岳阳市| 小金县| 望谟县|