?

天外來信

2018-09-08 11:15王麗麗
中國信息技術教育 2018年16期
關鍵詞:字符串信件代碼

王麗麗

情境導入

忽然有一天,阿派收到一封外面世界的來信,他迫不及待地開始讀信,卻發現信件內容全是一串一串的數字……

在這一課中,學生將學習如何利用Python讀寫文件及其拓展應用。

讀信

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

1.Python讀取文件

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

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

(2)read()方法

當read()的括號內為空或負數時,將讀取文件的所有內容。如果調用f.read(size),size是一個可選的數字類型的參數,則將讀取指定的數據。比如,將表1的第3行代碼修改為print(f.read(5)),則程序運行結果如圖3。

(3)readline()方法

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

(4)readlines()方法

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

(5)for line in f:的作用

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

關于文件的讀取模式,除了r(只讀)模式以外,還有rb模式,表示以二進制格式打開一個文件用于只讀。另外,還有r+模式,表示打開一個文件用于讀寫。還有rb+模式,可以用二進制格式打開一個文件用于讀寫。以上四種模式,文件指針都會放在文件的開頭。

2.破譯天外來信

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

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

對于信件中的那一串串數字,我們還可以使用不同的規則來解讀,當然所繪制的圖案也就不同。

回信

1.Python寫入文件

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

常用的文件寫入模式有w模式,表示打開一個文件且只能寫入。如圖11中w+模式表示打開一個文件用于讀寫。w和w+模式下,如果該文件已存在則將其覆蓋。如果該文件不存在,創建新文件。圖12的a+模式表示打開一個文件用于讀寫。如果該文件已存在,文件指針將會放在文件的結尾,即追加模式。如果該文件不存在,則創建新文件用于讀寫。

2.回信

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

參照阿派破譯數字信件的過程,你也可以逆向設計,將回信內容設置為幾行數字,并按照特定規則來讀取,實現特定的圖案效果。

在Python中的文件讀寫,還有其他的拓展應用,如讀取Excel文件,或者利用matplotlib第三方庫來繪制2D圖表等,你可以根據實際需要來進行設計和應用。

猜你喜歡
字符串信件代碼
My Vacation
一種基于PowerBuilder環境字符串相似度算法
神秘的代碼
SQL server 2008中的常見的字符串處理函數
倍增法之后綴數組解決重復子串的問題
一周機構凈增(減)倉股前20名
重要股東二級市場增、減持明細
近期連續上漲7天以上的股
最簡單的排序算法(續)
有獎問答
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合