我正在用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