2010-11-19 151 views
0

我正在用Python編寫一個類似流氓的遊戲,並且正在定義我的Tile類。瓷磚可以被阻擋,牆壁或地板。我想能夠寫一些東西沿線Python用戶定義的數據類型

self.state = Blocked 

類似於你將如何使用布爾(但有三個值)。

有沒有一種很好的方式讓我定義一種數據類型,使我能夠做到這一點?

感謝

回答

4

對於三個常量,我會用枚舉「模式」解包版本:

Blocked, Wall, Floor = range(3) 

如果它變得比這更復雜,雖然,我會看看其他enum types in python

+2

在Python 3中不需要使用元組(範圍(3)) - 對生成器的元組賦值工作正常(我剛測試過)。 – 2010-11-19 12:55:43

+0

@克里斯,謝謝。固定。 – aaronasterling 2010-11-19 12:57:38

0
class State: 
    Blocked=1 
    Wall=2 
    Floor=3 

some = State.Blocked 
+0

[第三個答案](http://stackoverflow.com/questions/36932/whats-the-best-way-to-implement-an-enum-in-python/1695250#1695250)的第二個版本是__way__更好IMO。它的結果與此相同,但不易出錯。 – aaronasterling 2010-11-19 13:04:29

0

利用位標誌。 你可以搜索谷歌瞭解更多信息,用最簡單的術語可以以二進制形式存儲布爾值,因爲True/False是一位,你可以用4位或1字節來存儲4種不同的布爾值。

因此,讓說這樣的:

Python語法:
a = 0x0#[這是位標記或二進制數<class 'int'>的蟒表示或在python27 <type 'int'>]

二進制表示:
爲0x0 = 000 [零爲零無關,二進制變量多長]
0x1 = 001 [1]
0x2 = 010 [2]
爲0x4 = 100 [4]
所以在這裏,我們有3米或更多不同的地方布爾值,我們可以檢查,因爲000000000001 == == 001 == 01爲0x1

,但是比特標誌
0x3 = 011 [3 = 2 + 1]
爲0x5 = 101 [5 = 4 + 1]
爲0x6 = 110 [6 = 4 + 2]
爲0x7 = 111 [7 = 4 + 2 + 1]

IN THE最簡單的條款 我會給你一個比較語法&這意味着與,這意味着位標誌中'1'的位置必須是相同的。所以在實用性方面爲0x1 & 0X2 0X2 ==將是假的,因爲001 & 010沒有「1」在同一個地方

所以如果你要檢查兩種類型的位標誌只是把它們加起來,檢查,使用上面的語法。
例如:0x3&(0x1+0x2)==(0x1+0x2)

我希望這有助於。快樂的谷歌搜索。

相關問題