-1

我正在尝试做这个MOOC

在这堂课上

我写了完全相同的代码,但它对我来说并不一样。我不明白。

我的完整代码在github 上

class Zone:

    ZONE = []
    MIN_LONGITUDE_DEGREES = -180
    MAX_LONGITUDE_DEGREES = 180
    MIN_LATITUDE_DEGREES = -90
    MAX_LATITUDE_DEGREES = 90
    WIDTH_DEGREES = 1
    HEIGHT_DEGREES = 1

    def __init__(self, corner1, corner2):
        self.corner1 = corner1
        self.corner2 = corner2
        self.inhabitants = 0

    @classmethod # etand donner qu'on ne sommes plus dans l'instance, masi oui dans la classe il faut changer self par cls
    def initialize_zones(cls):
        for latitude in range(cls.MIN_LATITUDE_DEGREES, cls.MAX_LATITUDE_DEGREES):
            for longitude in range(cls.MIN_LONGITUDE_DEGREES, cls.MAX_LONGITUDE_DEGREES, WIDTH_DEGREES):
                bottom_left_corner = Position(longitude, latitude)
                top_right_corner = Position(longitude + cls.WIDTH_DEGREES, latitude + cls.HEIGHT_DEGREES)
                zone = Zone(bottom_left_corner, top_right_corner)
                cls.ZONE.append(zone)
                #zone = Zone(bottem_letf_corner, top_right_corner)
        print(len(cls.ZONES))


def main():

    for agent_attributes in json.load(open("agents-100k.json")):
        latitude = agent_attributes.pop('latitude')
        longitude = agent_attributes.pop('longitude')
        position = Position(longitude, latitude)
        agent = Agent(position, **agent_attributes)
        Zone.initialize_zones()

main()

错误是:

回溯(最近一次通话最后):

文件“model.py”,第 64 行,在

main()

文件“model.py”,第 62 行,在 main

Zone.initialize_zones()

文件“model.py”,第 46 行,在 initialize_zones

for longitude in range(cls.MIN_LONGITUDE_DEGREES, cls.MAX_LONGITUDE_DEGREES, WIDTH_DEGREES):

NameError:未定义名称“WIDTH_DEGREES”

4

3 回答 3

2

for longitude in range(cls.MIN_LONGITUDE_DEGREES, cls.MAX_LONGITUDE_DEGREES, WIDTH_DEGREES)

应该

for longitude in range(cls.MIN_LONGITUDE_DEGREES, cls.MAX_LONGITUDE_DEGREES, cls.WIDTH_DEGREES)


下次,发布您的完整错误回溯

于 2018-07-20T10:49:03.570 回答
1

所以,毕竟,我有两个错误,其中一个是我不小心尝试插入的 CLS,但由于我在其中犯了一个错误,并且由于我没有注意,所以我有两个而不是一个,因为在打印它也写得很糟糕。

首先,正如@FHTMichell 所说,正确的是:

for longitude in range(cls.MIN_LONGITUDE_DEGREES, cls.MAX_LONGITUDE_DEGREES, WIDTH_DEGREES)

应该

for longitude in range(cls.MIN_LONGITUDE_DEGREES, cls.MAX_LONGITUDE_DEGREES, cls.WIDTH_DEGREES)

然后:

@classmethod
def initialize_zones(cls):

打印也是错误的:

print(len(cls.ZONES))

应该

print(len(cls.ZONE))

也感谢@user2653663 的帮助。

于 2018-07-20T11:34:37.247 回答
0

你有WIDTH_DEGREES而不是cls.WIDTH_DEGREES在你的for longitude ...循环中。

于 2018-07-20T10:50:39.300 回答