本系列博客介紹以python+pygame庫進行小游戲的開發。有寫的不對之處還望各位海涵。
在上一篇中,我們介紹了pygame的入門操作http://www.cnblogs.com/msxh/p/4966899.html
這次我們將一起學習pygame中的IO、數據和更多關於字體打印的知識。
一、python輸入輸出
1.輸出
python一次可以打印多個變量,只要用一個逗號將每個變量隔開就可以了。比如:
A = 123 B = "ABC" C = 456 D = "DEF" print(A,B,C,D)
有些python內部系統的值我們也是可以打印出來的。比如:
import sys print(sys.copyright) print(sys.platform) print(sys.version)
2.獲取用戶的輸入:
我們可以使用input函數來完成從控制台的輸入,這個函數的返回值是一個字符串。
name = raw_input("Hi! what's your name?") print(name)
3.異常處理
一個錯誤的數值輸入也是可能導致程序崩潰的(當需要輸入數字進行計算的時候,用戶卻輸入了一個非數值的變量)。因此我們需要需要使用try...except語句塊來捕捉異常。
將感覺會有異常產生的代碼放在try:語句塊里面,如果產生異常的話,將會執行except:語句塊里面的代碼,程序並不會崩潰。
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+" | 以追加和讀取的方式打開文件 |
#調用open函數打開一個文件 file =open("data.txt","r") #在完成操作后要將文件關閉 file.close()
要把數據寫入到一個文件,需要使用“w”屬性打開文件,然后使用file.write()函數寫入,另外還有writeline()函數,顧名思義,它是將單獨的一行寫入到文件中,(還有一種寫多行的形式是file.writelines(),用來寫入一個字符串列表)。對於需要保存為單獨一行的文本,我們可以在文本末尾添加上一個換行符\n。
file = open("data2.txt", "w") file.write("abcdefg\n") file.close()
如果要一次性將一個字符串列表中的數行寫入到文本中可以這樣做:
text_lines = [ "abc\n", "efg\n", "hij\n" ] file = open("data.txt", "w") file.writelines(text_lines) file.close()
從文本文件讀取內容
要讀取一個文件,我們必須先打開它,代碼和寫入的代碼類似,只需要改變一下文件模式:
file = open("data.txt", "r")
當文件打開以后,就可以讀取其中的數據了,有多個函數可以完成這個功能,我們一一介紹一下。
每次讀取一個字符可以使用file.read(n),n是要讀取的字符的數目。
char = file.read(10) print (char) #這段代碼會從文件中的當前指針位置讀取10個字符 #像這樣重復的調用,將繼續從該文件讀取更多的字符 #並且向前推進指針的位置
如果要把整個文件讀取到一個字符串變量中,可以使用下面的代碼完成:
file = open("data.txt", "r") all_data = file.readlines() print(all_data) file.close()
調用file.readlines()函數會創建一個列表,其中每一行都是列表,因此可以使用一個for循環將它打印出來:
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的一個模塊,所以使用前需要先引入。
import struct file = open("bin.dat", "wb") for n in range(100): data = struct.pack('i', n) file.write(data) file.close() #這段代碼是將100個整數寫入到文件中
2.讀取二進制文件
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()
struct.calcsize("i")可以計算出一個int類型的大小,以便讓struct.unpack知道應該讀取多少個字節的數據。
學了io和數據以后,我們完全可以制作一個類似於回答問題闖關類的游戲,將問題和答案都存在文件中,然后在程序里面加載它。答對就進行到下一題。