【python游戲編程之旅】第二篇--pygame中的IO、數據


本系列博客介紹以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和數據以后,我們完全可以制作一個類似於回答問題闖關類的游戲,將問題和答案都存在文件中,然后在程序里面加載它。答對就進行到下一題。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM