我买了一本 John V. Guttag 的 Python 入门书,我正在尝试自学 Python。大部分情况下它都很不错,但我有一个书中没有提到的问题。最新的部分谈到了德鲁肯步行模拟。在模拟中,它使用一个字段类来为醉汉创建一个可以进入的字段。然后他使用继承创建了另一种字段。我想知道如何在场地上制作一个围栏,以限制醉酒者走到边缘,然后醉酒者不得不转身。这是字段代码:
class Field(object):
def __init__(self):
self.drunks = {}
def addDrunk(self, drunk, loc):
if drunk in self.drunks:
raise ValueError('Duplicate drunk')
else:
self.drunks[drunk] = loc
def moveDrunk(self, drunk):
if drunk not in self.drunks:
raise ValueError('Drunk not in field')
xDist, yDist = drunk.takeStep()
currentLocation = self.drunks[drunk]
#use move method of Location to get new location
self.drunks[drunk] = currentLocation.move(xDist, yDist)
def getLoc(self, drunk):
if drunk not in self.drunks:
raise ValueError('Drunk not in field')
return self.drunks[drunk]
这是他使用继承创建的另一个字段:
class oddField(Field):
def __init__(self, numHoles, xRange, yRange):
Field.__init__(self)
self.wormholes = {}
for w in range(numHoles):
x = random.randint(-xRange, xRange)
y = random.randint(-yRange, yRange)
newX = random.randint(-xRange, xRange)
newY = random.randint(-yRange, yRange)
newLoc = Location(newX, newY)
self.wormholes[(x, y)] = newLoc
def moveDrunk(self, drunk):
Field.moveDrunk(self, drunk)
x = self.drunks[drunk].getX()
y = self.drunks[drunk].getY()
if (x, y) in self.wormholes:
self.drunks[drunk] = self.wormholes[(x, y)]
奇怪的领域使用虫洞来移动醉汉,这很酷。我还是 python 新手,所以我很好奇它是如何工作的。