0

作成したクラス オブジェクトが、リストからランダムに選択された項目を返さない理由を理解できません。値がどのように渡されるかについて基本的なことを理解できていないことが原因であることはわかっています。私はまだ Python を学ぶのが初めてで、これは私の 2 番目のアプリケーションにすぎません。Weapons()私の最終的な目標は、というarmed機能を持つ というクラスのオブジェクトを作成することweaponです。リストからランダムに選択された武器である「armed.weapon」を作成し、後で別のクラスオブジェクトの変数に割り当てられるようにしたいと考えています。つまり、「hero_weapon = armed.weapon」です。「armed.weapon」を作成して値を出力しようとして書いた例を次に示します。ここで私の論理の欠陥は何ですか? 「NameError: global name 'weapon' is not defined」が発生するのはなぜですか?

from random import randint

class Weapons(object):

def __init__(self, weapon = ''):
    self.weapon = weapon
    self.weapons_list = [
        'Flame Blade',
        'Ice Flail',
        'Lightning Mace'
    ]

def choices(self):
    self.weapon = self.weapons_list[randint(0, 2)]
    self.weapon = weapon
    return weapon


armed = Weapons()
armed.choices()
print armed.weapon
4

4 に答える 4

4

あなたのchoices()方法では:

self.weapon = weapon
return weapon

weaponは宣言されていません。おそらく、次のようなことをしたかったのでしょう。

weapon = self.weapon
return weapon

または単に:

return self.weapon
于 2012-11-07T21:59:20.363 に答える
2
def choices(self):
    self.weapon = self.weapons_list[randint(0, 2)]
    self.weapon = weapon
    return weapon

上記の方法では、何をしているのかわかりませんが、weapon宣言せずにアクセスしようとしています。そのため、エラーが発生します。

あなたはむしろこのように使いたかった: -

def choices(self):
    self.weapon = self.weapons_list[randint(0, 2)]
    return self.weapon
于 2012-11-07T21:58:50.910 に答える
1

問題はここにあります:

self.weapon = weapon

という名前のローカル変数を割り当てることはありませんweapon。1 行前に、インスタンス変数を設定していますself.weapon。ただreturn self.weapon

また、アイデアを得るために:

>>> import random
>>> weapons_list = [
...         'Flame Blade',
...         'Ice Flail',
...         'Lightning Mace'
...     ]
>>> 
>>> random.choice(weapons_list)
'Lightning Mace'
>>> random.choice(weapons_list)
'Ice Flail'
>>> _
于 2012-11-07T21:57:47.203 に答える
1

使用するだけです:

from random import randint

class Weapons(object):
    def __init__(self, weapon = ''):
        self.weapon = weapon
        self.weapons_list = [
            'Flame Blade',
            'Ice Flail',
            'Lightning Mace'
            ]

    def choices(self):
        self.weapon = self.weapons_list[randint(0, 2)]
        return self.weapon


armed = Weapons()
armed.choices()
print armed.weapon

あなたの間違いは:

self.weapon = weapon
return weapon

武器が宣言されていないため

于 2012-11-07T21:58:45.470 に答える