我正在用Python編寫一個類似流氓的遊戲,並且正在定義我的Tile
類。瓷磚可以被阻擋,牆壁或地板。我想能夠寫一些東西沿線Python用戶定義的數據類型
self.state = Blocked
類似於你將如何使用布爾(但有三個值)。
有沒有一種很好的方式讓我定義一種數據類型,使我能夠做到這一點?
感謝
我正在用Python編寫一個類似流氓的遊戲,並且正在定義我的Tile
類。瓷磚可以被阻擋,牆壁或地板。我想能夠寫一些東西沿線Python用戶定義的數據類型
self.state = Blocked
類似於你將如何使用布爾(但有三個值)。
有沒有一種很好的方式讓我定義一種數據類型,使我能夠做到這一點?
感謝
class State:
Blocked=1
Wall=2
Floor=3
some = State.Blocked
[第三個答案](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
利用位標誌。 你可以搜索谷歌瞭解更多信息,用最簡單的術語可以以二進制形式存儲布爾值,因爲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)
我希望這有助於。快樂的谷歌搜索。
在Python 3中不需要使用元組(範圍(3)) - 對生成器的元組賦值工作正常(我剛測試過)。 – 2010-11-19 12:55:43
@克里斯,謝謝。固定。 – aaronasterling 2010-11-19 12:57:38