NameError: name 'WIDTH_DEGREES' is not defined

NameError: name 'WIDTH_DEGREES' is not defined

我正在尝试这样做 MOOC

在这个class

我写了完全相同的代码,但对我来说效果不一样。没看懂。

我的完整代码在 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()

错误是:

Traceback (most recent call last):

File "model.py", line 64, in

main()

File "model.py", line 62, in main

Zone.initialize_zones()

File "model.py", line 46, in initialize_zones

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

NameError: name 'WIDTH_DEGREES' is not defined

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)


下次,post 你的完整错误回溯

您的 for longitude ... 循环中有 WIDTH_DEGREES 而不是 cls.WIDTH_DEGREES

所以,毕竟,我有两个错误,其中一个是 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 的帮助。