1

コードにいくつか問題があります。「PythonとPygameを使用したゲーム開発の開始」(例2-4および2-5)の例に従って、構文エラーが発生します。以下は問題のコードです。私はPythonを初めて使用し、おそらくタイプミスをしただけです。

この本はPython2.4を使用しています。2.7と3.2でエラーが発生します。

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__ます__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あなたの質問は、「なぜ私はここに来るのですか?私は1行目で定義しました」という線に沿ったものでなければなりませんTankでした。

このエラーを一般的な構文エラーとは考えないでください。エラーの種類から、知っておくべきことの多くがわかります。

于 2012-08-06T03:24:04.657 に答える