【问题标题】:DrunkWalk Classes醉酒步行班
【发布时间】:2019-03-29 01:16:19
【问题描述】:
    class Drunk:
    def __init__(self, name):
        """The name is assumed to be a string representing the drunk"""
        self.name = name
    def __str__(self):
        if self.name != None:
            return 'Anonymous'
        else:
            return self.name

# We will now define "a special case" of a drunk [A Subclass]
import random
class UsualDrunk3D(Drunk):
    def takeStep(self):
        # choose one of up/down/left/right/forward/backward with equal probability
        steps = [(1,0,0), (0,-1,0), (-1,0,0), (0,1,0), (0,0,-1), (0,0,1)]
        return random.choice(steps)


class UsualDrunk4D(Drunk):
    def takeStep(self):
        # choose one of the eight possible moves with equal probability
        steps = [(1,0,0,0), (0,-1,0,0), (-1,0,0,0), (0,1,0,0), (0,0,-1,0), (0,0,1,0), (0,0,0,1), (0,0,0,-1)]
        return random.choice(steps)

field = Field()
drunk = UsualDrunk3D('XYZW')
field.addDrunk(drunk, Location(0,0,0,0))
field.moveDrunk(drunk)
print(field.getLoc(drunk))

您好,我正在做一个醉酒步行模拟,我已经为字段和位置定义了类,但是我在使用 Drunk 类时遇到了问题,我能够减少这部分代码的错误吗?

错误即将出现:

ValueError                                Traceback (most recent call last)
<ipython-input-17-9bc178e381fe> in <module>()
     27 drunk = UsualDrunk3D('XYZW')
     28 field.addDrunk(drunk, Location(0,0,0,0))
---> 29 field.moveDrunk(drunk)
     30 print(field.getLoc(drunk))

<ipython-input-12-2846f0083c6c> in moveDrunk(self, drunk)
     11             raise ValueError("Drunk not in field")
     12         else:
---> 13             dx, dy, dz, dw = drunk.takeStep()
     14             self.drunks[drunk] = self.drunks[drunk].move(dx,dy,dz,dw)
     15     def getLoc(self, drunk):

ValueError: not enough values to unpack (expected 4, got 3)

【问题讨论】:

  • UsualDrunk3D.takeStep() 返回一个包含 3 个值的元组。显然,在您未包含的代码中,您正试图将它们分配给 4 个变量。

标签: python python-3.x class computer-science


【解决方案1】:

UsualDrunk3D.takeStep 返回一个包含 3 个值的元组。

UsualDrunk4D.takeStep 返回一个包含 4 个值的元组。

您未显示的代码 moveDrunk 期望 takeStep 返回一个具有 4 个值的元组:

dx, dy, dz, dw = drunk.takeStep()

您可以让UsualDrunk3D.takeStep 返回0 以获取其中一个维度,例如dw:

steps = [(1,0,0,0), (0,-1,0,0), (-1,0,0,0), (0,1,0,0), (0,0,-1,0), (0,0,1,0)]

【讨论】:

    【解决方案2】:

    我假设根据您不完整的代码,您正在将一个三元组(来自醉酒3D)解元为 dx、dy、dz、dw(即 4),因此这是一个明显的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-30
      • 2016-05-10
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多