本系列部落格介紹以python+pygame庫進行小遊戲的開發。有寫的不對之處還望各位海涵。
這次我們將一起學習pygame中的IO、資料和更多關於字型列印的知識。
一、python輸入輸出
1.輸出
python一次可以列印多個變數,只要用一個逗號將每個變數隔開就可以了。比如:
1 2 3 4 5 |
A = 123 B = "ABC" C = 456 D = "DEF" print(A,B,C,D) |
有些python內部系統的值我們也是可以列印出來的。比如:
1 2 3 4 |
import sys print(sys.copyright) print(sys.platform) print(sys.version) |
2.獲取使用者的輸入:
我們可以使用input函式來完成從控制檯的輸入,這個函式的返回值是一個字串。
1 2 |
name = raw_input("Hi! what's your name?") print(name) |
3.異常處理
一個錯誤的數值輸入也是可能導致程式崩潰的(當需要輸入數字進行計算的時候,使用者卻輸入了一個非數值的變數)。因此我們需要需要使用try…except語句塊來捕捉異常。
將感覺會有異常產生的程式碼放在try:語句塊裡面,如果產生異常的話,將會執行except:語句塊裡面的程式碼,程式並不會崩潰。
1 2 3 4 5 6 7 |
s = input("Enter a number: ") try: number = float(s) except: number = 0 answer = number * number print(number,"*",number,"=",answer) |
上面的那個程式,當你輸入了非法的資料以後,程式將會顯示(0, ‘*’, 0, ‘=’, 0)。
二、檔案輸入與輸出
1.操作文字檔案:
要在python裡面開啟一個檔案,可以使用open函式,第一個引數是檔名,第二個引數是開啟模式,下表展示了常見的開啟模式。
開啟模式 | 說明 |
“r” | 以讀取的方式開啟檔案 |
“w” | 以寫入的方式開啟檔案 |
“a” | 以追加的方式開啟檔案 |
“r+” | 以讀寫的方式開啟檔案 |
“w+” | 以寫讀的方式開啟檔案 |
“a+” | 以追加和讀取的方式開啟檔案 |
1 2 3 4 |
#呼叫open函式開啟一個檔案 file =open("data.txt","r") #在完成操作後要將檔案關閉 file.close() |
要把資料寫入到一個檔案,需要使用“w”屬性開啟檔案,然後使用file.write()函式寫入,另外還有writeline()函式,顧名思義,它是將單獨的一行寫入到檔案中,(還有一種寫多行的形式是file.writelines(),用來寫入一個字串列表)。對於需要儲存為單獨一行的文字,我們可以在文字末尾新增上一個換行符n。
1 2 3 |
file = open("data2.txt", "w") file.write("abcdefg\n") file.close() |
如果要一次性將一個字串列表中的數行寫入到文字中可以這樣做:
1 2 3 4 5 6 7 8 |
text_lines = [ "abc\n", "efg\n", "hij\n" ] file = open("data.txt", "w") file.writelines(text_lines) file.close() |
從文字檔案讀取內容
要讀取一個檔案,我們必須先開啟它,程式碼和寫入的程式碼類似,只需要改變一下檔案模式:
1 |
file = open("data.txt", "r") |
當檔案開啟以後,就可以讀取其中的資料了,有多個函式可以完成這個功能,我們一一介紹一下。
每次讀取一個字元可以使用file.read(n),n是要讀取的字元的數目。
1 2 3 4 5 6 |
char = file.read(10) print (char) #這段程式碼會從檔案中的當前指標位置讀取10個字元 #像這樣重複的呼叫,將繼續從該檔案讀取更多的字元 #並且向前推進指標的位置 |
如果要把整個檔案讀取到一個字串變數中,可以使用下面的程式碼完成:
1 2 3 4 |
file = open("data.txt", "r") all_data = file.readlines() print(all_data) file.close() |
呼叫file.readlines()函式會建立一個列表,其中每一行都是列表,因此可以使用一個for迴圈將它列印出來:
1 2 3 |
print("Lines: ", len(all_data)) for line in all_data: print(line.strip()) |
String.strip()方法會刪去行末的換行字元。
2.操作二進位制檔案
二進位制檔案開啟模式:
開啟模式 | 說明 |
“rb” | 以讀取的方式開啟二進位制檔案 |
“wb” | 以寫入的方式開啟二進位制檔案 |
“ab” | 以追加的方式開啟二進位制檔案 |
“rb+” | 以讀取寫入的方式開啟二進位制檔案 |
“wb+” | 以寫入讀取的方式開啟二進位制檔案 |
“ab+” | 以追加和讀取的方式開啟二進位制檔案 |
開啟二進位制檔案方法和文字檔案類似。
1.寫入二進位制檔案:
將資料寫到二進位制檔案的時候需要使用struct.pack函式,它可以將資料打包,當讀取的時候使用的是struct.unpack。struct是python的一個模組,所以使用前需要先引入。
1 2 3 4 5 6 7 8 9 |
import struct file = open("bin.dat", "wb") for n in range(100): data = struct.pack('i', n) file.write(data) file.close() #這段程式碼是將100個整數寫入到檔案中 |
2.讀取二進位制檔案
1 2 3 4 5 6 7 8 9 |
file = open("bin.dat", "rb") size = struct.calcsize("i") bytes_read = file.read(size) while bytes_read: value = struct.unpack("i", bytes_read) value = value[0] print(value, end=" ") bytes_read = file.read(size) file.close() |
1 |
struct.calcsize("i")可以計算出一個int型別的大小,以便讓struct.unpack知道應該讀取多少個位元組的資料。 |
學了io和資料以後,我們完全可以製作一個類似於回答問題闖關類的遊戲,將問題和答案都存在檔案中,然後在程式裡面載入它。答對就進行到下一題。
下一篇:pygame事件與裝置輪詢