1

我的代码有一些问题。我正在遵循“使用 Python 和 Pygame 开始游戏开发”一书中的一个示例(示例 2-4 和 2-5),我遇到了语法错误。下面是有问题的代码。我是 Python 新手,可能只是打错字了。

本书使用python 2.4。我收到 2.7 和 3.2 的错误。

两个问题:

代码行:

my_tank = Tank("Bob")

收到语法错误。my_tank突出显示。我确实让它开始工作,但我不确定它为什么开始工作。

代码行:

print self.name, "fires on", enemy.name

也收到语法错误。此self行中的 高亮显示。开始工作时my_tank,我开始收到此错误。不知道这里发生了什么。

class Tank(object):

    def _init_(self, name):
        self.name = name
        self.alive = True
        self.ammo = 5
        self.armor = 60

    my_tank = Tank("Bob")

    def _str_(self):

        if self.alive:
            return "%s (%i armor, %i shells)" % (self.name, self.armor, self.ammo)
        else:
            return "%s (dead)" % self.name

    def fire_at(self, enemy):

        if self.ammo >= 1:
            self.ammo -= 1
            print self.name, "fires on", enemy.name
            enem.hit()
        else:
            print self.name, "has no shells!"

    def hit(self):

        self.armor -= 20
        print self.name, "is hit!"
        if self.armor <= 0:
            self.explode()

    def explode(self):

        self.alive = False
        print self.name, "explodes!"
4

2 回答 2

4

正如@aland 所说,函数名应该是__init__and __str__

此外,这一行应该在课堂之外

my_tank = Tank("Bob")

毕竟,您想要一个类的实例供以后使用。

于 2012-08-06T03:07:21.583 回答
2

chrsaycock 的回答看起来是正确的,但我想强调注意您收到的回溯是多么重要。

当我运行您的代码时,我收到此错误:

Traceback (most recent call last):
  File "<pyshell#86>", line 1, in <module>
    class Tank(object):
  File "<pyshell#86>", line 9, in Tank
    my_tank = Tank("Bob")
NameError: name 'Tank' is not defined

您的问题应该类似于“为什么我在NameError这里得到一个?我已经Tank在第一行定义了。”

不要将此错误视为一般语法错误。错误的类型告诉你很多你需要知道的东西。

于 2012-08-06T03:24:04.657 回答